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

时间:2014-12-03 10:18:47

标签: sql sql-server

我有两个表(表1 - 主表,表2 - 详细信息表)。如何仅从主表中选择(查看)那些在详细信息表中没有记录的记录?我可以使用哪种SQL语句?我使用的是MS SQL Server 2012。

编辑:表格定义

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

5 个答案:

答案 0 :(得分:3)

使用NOT IN运算符

SELECT *
    FROM   Table1
    WHERE  ID NOT IN(SELECT Table1ID
                           FROM   Table2 ) 

答案 1 :(得分:2)

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

例如(MasterID是PK / FK):

SELECT master.*
FROM dbo.Table1 master
WHERE NOT EXISTS
(
    SELECT 1 FROM Table2 detail
    WHERE detail.MasterID = master.MasterID
)

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

答案 2 :(得分:1)

如何使用独占(左)外连接?

 SELECT 
       master.* 
 FROM 
       master LEFT OUTER JOIN details 
 ON    master.ID = details.masterID         
 WHERE details.ID IS NULL;

查看here以获取更详细的说明,了解为什么此查询可以解决此类问题。

答案 3 :(得分:0)

在这种情况下,我更喜欢使用左连接:

select tp.*
from   table_parent tp
       left join table_child tc on tc.parent_id = tp.id
where  tc.parent_id is null

答案 4 :(得分:-1)

这将有助于您回答您的问题:

http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html

SELECT column1 FROM t1 WHERE NOT EXISTS (SELECT * FROM t2);