有一张桌子:
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列?
如果是这样,它是什么?