我很久以前在其他DBMS(Oracle或MySQL ......真的记不起来)中做过这个,我正在寻找在SQL Server中执行此操作的方法,如果可能的话。
假设你有一个包含多个列的表,例如A,B,C,...... M.我希望用这个表中的一个选项来表示列A,B和C显示特定的值集,或者在其他表中单词,值列表组合。
例如,我希望检索所有符合以下任何组合的记录:
A B C
1 'Apples' '2016-04-12'
56 'Cars' '2014-02-11'
....
由于可能的组合列表可能很长(包括内部SELECT的选项),因此使用类似的东西是不切实际的:
WHERE ( A = 1 AND B = 'Apples' and C = '2016-04-12' ) OR
( A = 56 AND B = 'Cars' and C = '2014-02-11' ) OR
...
如上所述,我过去确实使用过这种类型的构造,它类似于:
SELECT *
FROM MyTable
WHERE (A,B,C) IN (SELECT A,B,C FROM MYOtherTable) ;
[很可能这种语法错了,但它显示了我正在寻找的内容]
另外,我宁愿避免使用动态SQL。
所以,问题是:
这在SQL Server中是否可行?
如果答案是肯定的,那么SELECT应如何表达?
提前致谢。
答案 0 :(得分:2)
您可以使用JOIN
SELECT m1.*
FROM MyTable m1
JOIN MYOtherTable m2
ON m1.A = m2.A
AND m1.B = m2.B
AND m1.C = m2.C
或Exists
SELECT m1.*
FROM MyTable m1
WHERE EXISTS (SELECT 1
FROM MYOtherTable m2
WHERE m1.A = m2.A
AND m1.B = m2.B
AND m1.C = m2.C)