我需要你的建议。
我的 T-SQL 查询中有一个 CASE
语句,如下所示:
CASE
WHEN PLAN_GIVEN IN ( this list contains 1700 values to compare ) THEN 'P1'
WHEN PLAN_GIVEN IN ( this list contains 1800 values to compare ) THEN 'P2'
ELSE NULL
END AS PLAN_NAME
我无法列出所有 1700 个值 IN ( ) THEN 'P1'
因为所有这些值看起来都不太好。
我尝试将 1700 个值和 1800 个值保存到 lookup_table
中,例如
lookup_table
columnA = all 1700 values
columnB = all 1800 values
并使用了这个查询:
CASE
WHEN PLAN_GIVEN IN (SELECT columnA from lookup_table) THEN 'P1'
WHEN PLAN_GIVEN IN (SELECT columnB from lookup_table) THEN 'P2'
ELSE NULL
END AS PLAN_NAME
上面的代码可以运行,但是执行需要花费更多时间将近 10 分钟才能完成。
是否有其他方法可以实现此目的?
最佳答案
尝试使用 EXISTS
而不是使用 PLAN_GIVEN IN
:
CASE
WHEN EXISTS (SELECT NULL from lookup_table WHERE PLAN_GIVEN = columnA)
THEN 'P1'
WHEN EXISTS (SELECT NULL from lookup_table WHERE PLAN_GIVEN = columnB)
THEN 'P2'
ELSE NULL
END AS PLAN_NAME
或者,尝试连接到查找表并与 CASE
表达式中的查找值进行比较:
SELECT ...
CASE PLAN_GIVEN
WHEN lookup_table.columnA THEN 'P1'
WHEN lookup_table.columnB THEN 'P2'
ELSE NULL
END AS PLAN_NAME
...
FROM ...
LEFT JOIN lookup_table
ON PLAN_GIVEN IN (lookup_table.columnA, lookup_table.columnB)
关于sql - 在子句中包含许多值 - SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17600660/