SQL - 如何选择没有详细记录的主记录?

Tra*_*cer 2 sql sql-server

我有两个表(表 1 - 主表,表 2 - 详细表)。如何仅选择(查看)主表中那些在详细表中没有记录的记录?我可以使用什么 SQL 语句来实现此目的?我正在使用 MS SQL Server 2012。

编辑:表定义

表 1 - ID (PK) 表 2 - ID (PK)、表 1ID (FK)

Pரத*_*ீப் 6

使用NOT IN运算符

SELECT *
    FROM   Table1
    WHERE  ID NOT IN(SELECT Table1ID
                           FROM   Table2 ) 
Run Code Online (Sandbox Code Playgroud)


Tim*_*ter 5

我会使用它NOT EXISTS,因为它清晰、高效,并且对于可为空的列没有问题。

例如(MasterID是PK/FK):

SELECT master.*
FROM dbo.Table1 master
WHERE NOT EXISTS
(
    SELECT 1 FROM Table2 detail
    WHERE detail.MasterID = master.MasterID
)
Run Code Online (Sandbox Code Playgroud)

但您还有其他选择:http://sqlperformance.com/2012/12/t-sql-queries/left-anti-semi-join