我有两个表(表1 - 主表,表2 - 详细信息表)。如何仅从主表中选择(查看)那些在详细信息表中没有记录的记录?我可以使用哪种SQL语句?我使用的是MS SQL Server 2012。
编辑:表格定义
表1 - ID(PK) 表2 - ID(PK),表1ID(FK)
答案 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);