考虑简单的WHERE子句:
WHERE HomeZipCode = 12345
简单,对吧?但是,如果您想查找多个邮政编码怎么办?
WHERE HomeZipCode IN (12345, 34567, 56789)
我喜欢IN运营商。
今天我了解到,您可以在概念上反转IN语句,以在多列中搜索特定值:
WHERE 12345 IN (HomeZipCode, OfficeZipCode)
这对我来说非常有用,但是,作为我,我想要更多。我可以为第三个例子指定多个值吗?
WHERE !?{12345,34567,56789}?! IN (HomeZipCode, OfficeZipCode)
到目前为止,我还没有发现任何允许在不重复VALUE IN (COL_LIST)
语法的情况下指定这些多个值的方法。
WHERE
(12345 IN (HomeZipCode, OfficeZipCode)) OR
(34567 IN (HomeZipCode, OfficeZipCode)) OR
(56789 IN (HomeZipCode, OfficeZipCode))
或
WHERE
(HomeZipCode IN (12345, 34567, 56789)) OR
(OfficeZipCode IN (12345, 34567, 56789))
理想情况下,我希望只将列或值列表指定一次,以便将列表保存在代码中的一个位置。
答案 0 :(得分:1)
您可以使用表值构造函数指定多个值,并将其与IN
运算符
SELECT *
FROM table_name
OUTER APPLY (VALUES (12345), (34567), (56789)) AS [set](zip)
WHERE [set].zip IN (HomeZipCode, OfficeZipCode)
具有多个UNION
而非VALUES
SELECT *
FROM table_name
OUTER APPLY (
SELECT '12345'
UNION ALL
SELECT '34567'
UNION ALL
SELECT '56789') AS [set](zip)
WHERE [set].zip IN (HomeZipCode, OfficeZipCode)
答案 1 :(得分:0)
这是我将使用拆分功能(您可以从许多google-able源获取代码的代码)将逗号分隔的邮政编码列表拆分为派生表,然后加入
HomeZipCode = value
OR OfficeZipCode = value
或者只是在
value IN (HomeZipCode, OfficeZipCode)