选择不在其他表sql server中的字段组合
Posted
技术标签:
【中文标题】选择不在其他表sql server中的字段组合【英文标题】:Select combination of fields not in other table sql server 【发布时间】:2019-02-20 17:45:32 【问题描述】:假设我有这两个表:
Table 1 Table 2
PName | FID PName | FID
---------------- ---------------
Dog | 1 Dog | 1
Dog | 2 Cat | 2
Cat | 2 Cat | 4
Cat | 3
什么是正确的查询来选择第二个表中不存在的第一个表的两个字段组合?
我想得到的是
Table 1
PName | FID
----------------
Dog | 2
Cat | 3
会这样吗?
SELECT * FROM [Table 1] WHERE ([Table 1].[PName] NOT IN (SELECT [Table 2].[PName] FROM [Table 2]) AND ([Table 1].[FID] NOT IN (SELECT [Table 2].[FID] FROM [Table 2]))
【问题讨论】:
@user7733611 您发布了指向此问题的链接 谢谢,我想知道为什么它不起作用...***.com/questions/8165534/… 【参考方案1】:我会使用except
。
select * from table1
except
select * from table2
值得一提的是this great answer 讨论except
与not in
,尤其是关于NULL
【讨论】:
【参考方案2】:我可能会建议如下:
select t1.*
from table1 t1
where not exists (select 1
from table2 t2
where t2.pname = t1.pname and t2.fid = t1.fid
);
【讨论】:
这对 mysql 等其他技术很有用,谢谢。【参考方案3】:你需要一个左连接并且只取不匹配的行:
select t1.*
from t1 left join t2
on t1.pname = t2.pname and t1.fid = t2.fid
where t2.pname is null and t2.fid is null
见demo
【讨论】:
以上是关于选择不在其他表sql server中的字段组合的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 视图中选择值(如果存在)或其他值(如果不在 SQL Server 视图中)