多列和IN运算符

时间:2016-10-12 10:01:06

标签: sql sql-server tsql sql-server-2012 multiple-columns

有一张桌子:

CREATE TABLE dbo.TestTable
    ( id INT IDENTITY(1, 1) NOT NULL
    , data1 VARCHAR(255) NULL
    , data2 VARCHAR(255) NULL
    , data3 VARCHAR(255) NULL
    )

......以及一些示例数据:

INSERT  INTO dbo.TestTable
VALUES    ( 'some data'  , 'some other data'  , 'and another')
        , ( 'some data 2', 'some other data 2', 'and another 2')
        , ( 'some data 3', 'some other data 3', 'and another 3')
        , ( 'some data 4', 'some other data 4', 'and another 4')
        , ( 'some data 5', 'some other data 5', 'and another 5')
        , ( 'some data 6', 'some other data 6', 'and another 6')

...最后是一个简单的SELECT查询:

SELECT *
FROM dbo.TestTable tt 
WHERE  tt.data1 IN ('x', 'y', 'z')
    OR tt.data2 IN ('x', 'y', 'z')
    OR tt.data3 IN ('x', 'y', 'z')

注意:在我的实际场景中,IN运算符中的值数和dataXX列的数量都要大得多。

如您所见,所搜索的值列表('x','y','z')重复多次。我正在寻找一种“更智能”的方法来构建这个查询,纯粹是为了避免多次复制“OR tt.dataXX in(...)”行。

有没有什么办法可以在上面的SELECT查询中使用('x','y','z')值列表只是ONCE并覆盖所有tt.dataXX列?

如果是这样,它是什么?

1 个答案:

答案 0 :(得分:3)

我无法在此测试,但您应该可以使用table value constructor执行此类操作。

my.cnf