Локально-симметричная разница в sql - PullRequest
0 голосов
/ 25 августа 2010

У меня есть проблема, похожая на этот вопрос StackOverflow , за исключением того, что мне нужно исключить некоторые поля сравнения из сравнения, но все равно включить его в набор результатов.
Я рассматриваю проблему как локальносимметричная разница.

Например, в таблицах A и B есть столбцы X, Y, Z, и я хочу сравнить только Y, Z для различий, но я все еще хочу, чтобы набор результатов включал X.

Ответы [ 2 ]

2 голосов
/ 25 августа 2010

Похоже, это в основном то, что вы хотите.Сопоставьте строки между двумя таблицами в столбцах Y и Z, найдите несопоставленные строки и выведите значения столбцов X, Y и Z.

SELECT a.x, a.y, a.z, b.x, b.y, b.z
  FROM a FULL OUTER JOIN b ON a.y = b.y AND a.z = b.z
  WHERE a.y IS NULL OR b.y IS NULL
0 голосов
/ 25 августа 2010

SQL старого стиля для полного объединения - A объединяется с B, исключая строки в B также в A (в середине):

-- all rows in A with or without matching B
select a.x, a.y, a.z 
  from a
       left join b
         on a.x = b.x
        and a.y = b.y
union all
-- all rows in B with no match in A to "exclude the middle"
select b.x, b.y, null as z
  from b
 where not exists (select null
                     from a
                    where b.x = a.x
                      and b.y = a.y)

Стиль ANSI:

select coalesce(a.x, b.x) as x,
       coalesce(a.y, b.y) as y,
       a.z
  from a 
       full outer join b
         on a.x = b.x
        and a.y = b.y
* 1006коалиция для безопасности;У меня никогда не было причин писать полное внешнее соединение в реальном мире.

Если то, что вы действительно хотите выяснить, идентичны ли две таблицы, вот как:

SELECT COUNT(*) 
  FROM (SELECT list_of_columns
          FROM one_of_the_tables
         MINUS
        SELECT list_of_columns
          FROM the_other_table
        UNION ALL
        SELECT list_of_columns
          FROM the_other_table
         MINUS
        SELECT list_of_columns
          FROM one_of_the_tables)

Если это возвращает ненулевой результат, тогда есть разница.Он не говорит вам, в каком столе он находится, но это начало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...