如何在3个SQL表中查找不匹配的值?

时间:2019-06-03 11:01:06

标签: sql sql-server

我正在寻找我认为对三个表进行双重嵌套检查的方法,但不知道如何执行。

我有Table1,Table2和Table3。 在表1中,所有内容都由ID和“ Longform”和“ Shortform”绑定:

tables

我正在寻找: ID在表2中显示的条目与表3中的条目具有 相同的长格式,但没有共享相同的短格式。

这大约是我得到的:

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 个答案:

答案 0 :(得分:2)

尝试以下操作:

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 :(得分:1)

要获得longform,请将table1加入table2table3。然后使用EXISTS来签入子查询,如果table1的ID不同但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);

答案 2 :(得分:1)

假设ID在所有三个表中都是唯一的

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