gpt4 book ai didi

SQL Server : Alternative of long CASE statement

转载 作者:行者123 更新时间:2023-12-02 09:34:18 26 4
gpt4 key购买 nike

我有一个很长的CASE语句,它使得查询非常长。还有其他方法吗?长CASE语句会影响性能吗?我看到人们推荐 COALESCE 但我不确定这在我的查询中是否是一个好的替代方案。

下面的示例中,a、b、c、d、e、f 是表中的列,但我只是使用此处的字母来举例。

UPDATE table
SET totalAmt = CASE
WHEN product_id = 1 THEN a*b*c*d
WHEN product_id = 2 THEN c*d*e + 1
WHEN product_id = 3
THEN
CASE WHEN term = 12 THEN b*c*d*e ELSE a*b*e*f END
WHEN product_id = 4 THEN a+b+c+d
etc.....
END
FROM table

最佳答案

我预计 CASE 语句本身不会出现任何性能问题。由于您的一次查询只对数据进行一次传递,因此它的性能可能比针对每个产品 ID 进行多次查询要好得多。

使用 WHERE 子句,查询可能会执行得更好 - 如果您的长查询可以实现这一点。

如果表很大,并且按产品 ID 建立索引,并且查询正在更新一小部分产品,则将查询分​​成每个产品 ID 的单独 UPDATE 查询可能会获得更好的性能。否则,您可能会在一个巨大的表上进行表扫描。例如:

UPDATE table SET totalAmt = a*b*c*d WHERE product_id = 1
UPDATE table SET totalAmt = c*d*e + 1 WHERE product_id = 2

如果所有情况都依赖于 product_id,那么您可以将语法缩写为:

CASE product_id
WHEN 1 THEN a*b*c*d
WHEN 2 THEN ...
END

我建议使用注释来使代码更具可读性。例如,如果产品是一组硬编码的已知 ID,您可以指定它们是什么。同样,解释计算可能有助于将来的代码维护:

UPDATE table
SET totalAmt =
CASE WHEN product_id = 1 -- table
THEN a*b*c*d -- some explanation of calculation
CASE WHEN product_id = 2 -- chair
THEN ...

关于SQL Server : Alternative of long CASE statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28838994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com