代码之家  ›  专栏  ›  技术社区  ›  ewok

从表中选择,其中一对列进行任意多对值中的一对

  •  0
  • ewok  · 技术社区  · 4 月前

    我需要在一个表中找到所有行,其中一对列与值对列表中的任何条目匹配。例如,当查找单个列时,您可以

    SELECT *
    FROM Table t
    WHERE t.column IN ('value1', 'value2', 'value3');
    

    我需要的基本上是这样的东西:

    SELECT *
    FROM Table t
    WHERE (t.column1, t.column2) IN
      (('value1', 1),
       ('value2', 2),
       ('value3', 3));
    

    注意,我是 寻找这个:

    SELECT *
    FROM Table t
    WHERE 
       t.column1 IN ('value1', 'value2', 'value3')
       AND t.column2 IN (1,2,3);
    

    因为这会给我所有的行 column1 columns2 匹配他们的列表 独立地 而不是匹配特定的对。这对 ('value1', 3) 应该 匹配我的目标查询。

    如何在SQL Server中完成此操作?

    1 回复  |  直到 4 月前
        1
  •  2
  •   Charlieface    4 月前

    你可以加入 VALUES 构造函数

    SELECT t.*
    FROM Table t
    JOIN (VALUES
       ('value1', 1),
       ('value2', 2),
       ('value3', 3)
    ) v(colum1, column2)
      ON v.column1 = t.column1
     AND v.column2 = t.column2;
    

    也可以使用表值参数、表变量或临时表。