сравнение строк из разных таблиц

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

У меня есть таблица A и таблица B в SQL SERVER. Я хочу сравнить некоторые столбцы строки из каждой таблицы и вернуть разные значения из таблицы A. Как мне это сделать?

Пример :

 TABLE A
   columns : id txt1 txt2 txt3 
   values :   1  XY   XX  XXY



 TABLE B
  columns : id txt1 txt2 txt3 txt4
  values :  1  XZ   XX  XYZ    XXX
  

Я хочу результат:

  TABLE A 
   txt1  txt3 
    XY   XXY
  

Ответ №1:

Это слишком долго для комментария.

SQL-запрос возвращает фиксированный набор столбцов. Итак, вы не можете делать то, что хотите. Динамический SQL даже не работает, потому что разные строки могут иметь разные наборы столбцов.

Вы могли бы сделать что-то вроде NULL out значения, которые являются одинаковыми:

 select a.id,
       nullif(a.txt1, b.txt1) as txt1,
       nullif(a.txt2, b.txt2) as txt2,
       nullif(a.txt3, b.txt3) as txt3,
       nullif(a.txt4, b.txt4) as txt4
from a left join
     b
     on a.id = b.id;
  

Или перечислите имена столбцов, которые отличаются:

 select a.id,
       concat_ws(',',
                 (case when a.txt1 = b.txt1 then 'txt1' end),
                 (case when a.txt2 = b.txt2 then 'txt2' end),
                 (case when a.txt3 = b.txt3 then 'txt3' end),
                 (case when a.txt4 = b.txt4 then 'txt4' end)
                )
from a left join
     b
     on a.id = b.id;