加入表SQL Server

时间:2010-01-21 19:13:12

标签: sql sql-server

我想加入两个表,但我希望结果集只显示不在右侧的匹配。

示例:

LeftTable

  • leftID | PK
  • value |

RightTable

  • rightID | PK
  • leftID | FK

    选择l.value

    来自LeftTable l

    加入RightTable r

    on l.leftID = r.leftID

我知道这不会给我我想要的东西,但我只想通过使用leftID外键关系找出左表中哪些项目不会出现在右侧。

有什么想法吗?

5 个答案:

答案 0 :(得分:11)

如果我们做什么

select LT.value
from LeftTable LT
left outer join RightTable RT
on LT.leftID = RT.leftID
Where RT.leftId is null

SO join将返回所有匹配以及左侧但不是右侧的行。使用where子句,我们只获得右表left id为null的那些行。

答案 1 :(得分:5)

你几乎拥有它,只是一些小的改动 - 连接应该是LEFT JOIN,而不是[INNER] JOIN,你需要只返回缺少右表的行,即它的字段为NULL :

SELECT T1.value
FROM LeftTable T1
LEFT JOIN RightTable T2
ON T1.leftID = T2.leftID
WHERE T2.leftID IS NULL

答案 2 :(得分:0)

select * from LeftTable where leftID not in (select leftID from RightTable)

答案 3 :(得分:0)

SELECT LeftID
FROM LeftTable 
    LEFT OUTER JOIN RightTable ON LeftTable.LeftID = RightTable.LeftID
WHERE RightTable.RightId IS NULL

答案 4 :(得分:0)

使用exists的替代方案,优先使用where not in。检查右边空状态的left outer join可能仍然是最佳的。

select
        left.*
    from
        LeftTable as left
    where
        not exists (
            select
                    *
                from
                    RightTable as right
                where
                    right.RightID = left.LeftID
            )