SQL для выборки данных, где уникальный ключ совпадает, но в некоторых других столбцах между разными таблицами данные разные - PullRequest
0 голосов
/ 14 ноября 2018

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

Table A  
ColumnA ColumnB  
A         1  
B         2  
C         2  
D         8  

Table B  
ColumnC ColumnD  
A         1  
B         3  
C         5  
F         4  

Например, результат сравнения приведенной выше таблицы при сравнении таблицы A с B должен составлять

B         2
C         2

и при сравнении таблицы B с A она должна составлять

B         3
C         5

В идеале должна быть разница в базовой таблице. Я пробовал присоединения и союзы, но я не могу получить данные, как указано выше.

Ответы [ 3 ]

0 голосов
/ 14 ноября 2018

Я бы сделал:

SELECT t.*
FROM tablea t
WHERE EXISTS (SELECT 1 FROM tableb t1 WHERE t1.cola = t.cola AND t1.colb <> t.cold);

То же самое было бы для второй версии, просто нужно смахнуть имена таблиц.

0 голосов
/ 14 ноября 2018

используйте EXISTS и объедините все

SELECT t.*
FROM tablea t
WHERE EXISTS (SELECT 1 FROM tableb t1 WHERE t1.cola = t.cola AND t1.colb <> t.colb)
union all    
SELECT t.*
FROM tableb t
WHERE EXISTS (SELECT 1 FROM tablea t1 WHERE t1.cola = t.cola AND t1.colb <> t.colb)
0 голосов
/ 14 ноября 2018
  • Поскольку вам нужны только те строки, которые имеют совпадающие значения FK в обеих таблицах, нам просто нужно использовать INNER JOIN.
  • Теперь мы можем просто рассмотреть несопоставимые строки, используя WHERE .. <> ..

При сравнении таблицы A с таблицей B мы можем получить только строки таблицы A:

SELECT
 tA.* 
FROM tableA AS tA
JOIN tableB AS tB 
  ON tB.ColumnC = tA.ColumnA
WHERE tB.ColumnD <> tA.ColumnB

При сравнении таблицы B с таблицей A просто выберите строки только из таблицы B:

SELECT
 tB.* 
FROM tableA AS tA
JOIN tableB AS tB 
  ON tB.ColumnC = tA.ColumnA
WHERE tB.ColumnD <> tA.ColumnB
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...