Dennis Jaher..
11
关于解决方案的警告:
如果行不是唯一的,许多现有解决方案将提供错误的输出
如果您是唯一创建表的人,那么这可能并不重要,但是当其中一个表可能不包含唯一行时,几种解决方案将提供与所讨论代码不同数量的输出行。
关于问题陈述的警告:
与多个列不存在,请仔细考虑您想要的
当我看到包含两列的输入时,我可以想象它意味着两件事:
a列和b列的值独立出现在另一个表中
a列和b列的值一起出现在另一个表中的同一行
方案1相当简单,只需使用两个IN语句即可。
与大多数现有答案相一致,我在此概述方案2(以及简要判断)中提到的方法和其他方法:
EXISTS(安全,建议用于SQL Server)
正如@mrdenny提供的那样,EXISTS听起来完全符合您的要求,这是他的示例:
SELECT * FROM T1
WHERE EXISTS
(SELECT * FROM T2
WHERE T1.a=T2.a and T1.b=T2.b)
左半连接(安全,建议用于支持它的方言)
这是一种非常简洁的连接方式,但是不幸的是,大多数SQL方言,包括SQL Server,目前都不支持它。
SELECT * FROM T1
LEFT SEMI JOIN T2 ON T1.a=T2.a and T1.b=T2.b
多个IN语句(安全,但是要注意代码重复)
正如&