Как искать несоответствующие значения в 3 таблицах SQL? - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь сделать то, что считаю двойной проверкой для трех таблиц, но не знаю, как это сделать.

У меня есть Table1, Table2 и Table3.Все связаны идентификатором, а также «Длинная форма» и «Короткая форма» в таблице 1:

tables

Я пытаюсь найти: Записи, чьи идентификаторы появляютсяВ Таблице 2 имеет такой же Longform, как и в Таблице 3, но не имеет одинаковую Shortform.

Это примерно так, как я получил:

SELECT T2.Longform,T2.Shortform FROM(
    SELECT Table1.Longform,Table1.Shortform,Table1.ID FROM OuterTable1.Table1
    LEFT JOIN OuterTable2.Table2 on Table1.ID = Table2.ID)
    WHERE Table2.ID IS NOT NULL) T2
;

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

Любая помощь ценится как всегда.

Ответы [ 3 ]

2 голосов
/ 03 июня 2019

Попробуйте следующее:

Select *
(
    Select T1.*
    from T2
    inner join T1
    on  T1.ID = T2.ID
) as Tab
inner join
(
    Select T1.*
    from T3
    inner join T1
    on T1.ID =  T3.ID
) as Tab2
on Tab.id = Tab2.id
and Tab.Longform = Tab2.Longform
and Tab.Shortform <> Tab2.Shortform
1 голос
/ 03 июня 2019

Предполагается, что идентификатор уникален во всех трех таблицах

Select t2.id,t2.shortform, t1.shortform AS shortformTab1, t2.longform 
                 FROM table2 t2 
                 JOIN table3 t3
                      ON t2.id = t3.id AND t2.longform = t3.longform
                 JOIN table1 t1
                      ON t2.id = t1.id AND t2.shortform != t1.shortform
1 голос
/ 03 июня 2019

Чтобы получить longform присоединение table1 к table2 или table3.Затем используйте EXISTS, чтобы проверить в подзапросе, отличаются ли идентификаторы table1, но longform равно.

SELECT *
       FROM table2 t21
            INNER JOIN table1 t11
                       ON t11.id = t21.id
       WHERE EXISTS (SELECT *
                            FROM table3 t32
                                 INNER JOIN table1 t12
                                            ON t12.id = t32.id
                            WHERE t12.id <> t11.id
                                  AND t12.longform = t11.longform);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...