SQL Server - WHERE <several columns =“”>(<list of =“”columns =“”values =“”>)

时间:2017-01-10 16:27:37

标签: sql-server select

我很久以前在其他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。

所以,问题是:

  1. 这在SQL Server中是否可行?

  2. 如果答案是肯定的,那么SELECT应如何表达?

  3. 提前致谢。

1 个答案:

答案 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)