sql - 在子句中包含许多值 - SQL

标签 sql sql-server performance tsql case

我需要你的建议。

我的 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/

相关文章:

c# - Entity Framework 5 性能问题

c# - SUM 和 Group after Right Join 两个表

html - 更改 SQL Server 数据库邮件中值的颜色

SQL left 2 或 Convert(varchar(2) ,'Chgffgjjx' ) 哪个更快

sql - 计算两个日期之间的持续时间(将考虑月份和年份)

css - 样式表 : 1 big one or a few bigones or several smaller ones?

android - 监控 Android 手机上的电池电量

sql - 如何生成两个值之间的数字

几分钟后 MySQL 更新列

sql-server - t-sql : create and add several namespaces to xml