Соединение двух таблиц в столбце A или столбце B в SQL - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть две таблицы, называемые План и Факт.Каждая строка в каждой таблице представляет уникальный элемент, и мне нужно найти элементы, которые находятся в таблице плана, но не в таблице фактических данных, и наоборот.

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

Например:

Скажите «План» выглядит следующим образом:

ID_1        ID_2         ID_3
aaa         Null         Null 
Null        111          Null
Null        Null         123
bbb         222          Null 
ccc         Null         456
Null        333          789
ddd         444          202

Скажите«Фактический» выглядит следующим образом:

ID_1         ID_2            ID_3
aaa          Null            Null
Null         111             Null
bbb          222             Null 
Null         333             789
Null         555             Null 
eee          Null            303

Используя SQL, как я могу определить строки «В плане, а не в фактических»:

Null     Null       123
ccc      Null       456
ddd      444        202

И в «В»Фактические не в плане "строк:

Null     555   Null 
eee      Null  303

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

Если вы используете ORACLE, вы можете использовать оператор MINUS. Он будет выбирать строки в таблице «План», а не в таблице «Фактические».

SELECT ID_1, ID_2, ID_3
 FROM  Plan
MINUS
SELECT ID_1, ID_2, ID_3
 FROM  Actual;

Если вы используете SQL Server; используйте EXCEPT вместо минус.

0 голосов
/ 27 апреля 2019

Вы можете использовать левое соединение.Ниже приведен пример с MySql.

В плане не фактический

SELECT Plan.* FROM Plan 
LEFT JOIN Actual ON (Plan.ID_1 = Actual.ID_1 AND Plan.ID_2 = Actual.ID_2 AND Plan.ID_3 = Actual.ID_3) 
WHERE Actual.ID_1 IS NULL AND Actual.ID_2 IS NULL AND Actual.ID_3 IS NULL;

В факте не в плане

SELECT Actual.* FROM Actual 
LEFT JOIN Plan ON (Plan.ID_1 = Actual.ID_1 AND Plan.ID_2 = Actual.ID_2 AND Plan.ID_3 = Actual.ID_3) 
WHERE Plan.ID_1 IS NULL AND Plan.ID_2 IS NULL AND Plan.ID_3 IS NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...