Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-如何选择没有详细记录的主记录?_Sql_Sql Server - Fatal编程技术网

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

SQL-如何选择没有详细记录的主记录?,sql,sql-server,Sql,Sql Server,我有两张表,表1-主表,表2-明细表。如何从主表中选择“仅查看在明细表中没有记录的记录”?我可以使用什么SQL语句来执行此操作?我正在使用MS SQL Server 2012 编辑:表定义 表1-ID PK Table2-ID PK,Table1ID FK我将使用的是不存在的,因为它清晰、高效,并且与可空列没有任何问题 例如,MasterID是PK/FK: SELECT master.* FROM dbo.Table1 master WHERE NOT EXISTS ( SELECT 1

我有两张表,表1-主表,表2-明细表。如何从主表中选择“仅查看在明细表中没有记录的记录”?我可以使用什么SQL语句来执行此操作?我正在使用MS SQL Server 2012

编辑:表定义

表1-ID PK Table2-ID PK,Table1ID FK

我将使用的是不存在的,因为它清晰、高效,并且与可空列没有任何问题

例如,MasterID是PK/FK:

SELECT master.*
FROM dbo.Table1 master
WHERE NOT EXISTS
(
    SELECT 1 FROM Table2 detail
    WHERE detail.MasterID = master.MasterID
)
但您还有其他选择:

使用运算符


这将极大地帮助您回答您的问题:


使用独占的左外联接如何

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

请查看更详细的说明,为什么此查询是此类问题的解决方案。

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

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

两个表中的记录是否共享相同的ID?表1-ID PK和表2[ID PK,表1ID FK]
 SELECT 
       master.* 
 FROM 
       master LEFT OUTER JOIN details 
 ON    master.ID = details.masterID         
 WHERE details.ID IS NULL;
select tp.*
from   table_parent tp
       left join table_child tc on tc.parent_id = tp.id
where  tc.parent_id is null