在没有重复代码的情况下跨多个列搜索多个值?
Searching for multiple values across multiple columns without repetitive code?
考虑简单的 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))
理想情况下,我希望只指定一次列或值列表,以便在代码中将列表维护在一个位置。
我将在此处使用拆分函数(您可以从许多 google 来源中获取其中一个的代码)将以逗号分隔的邮政编码列表拆分为派生的 table,然后在
加入它
HomeZipCode = value
OR OfficeZipCode = value
或者只是
value IN (HomeZipCode, OfficeZipCode)
您可以使用 table 值构造函数来指定多个值并将其与 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)
考虑简单的 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))
理想情况下,我希望只指定一次列或值列表,以便在代码中将列表维护在一个位置。
我将在此处使用拆分函数(您可以从许多 google 来源中获取其中一个的代码)将以逗号分隔的邮政编码列表拆分为派生的 table,然后在
加入它 HomeZipCode = value
OR OfficeZipCode = value
或者只是
value IN (HomeZipCode, OfficeZipCode)
您可以使用 table 值构造函数来指定多个值并将其与 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)