【发布时间】:2016-02-24 05:06:25
【问题描述】:
我需要关于逻辑的建议。应用程序中有一个更新查询,如下所示
UPDATE TABLE
SET FLAG = CASE
WHEN FLAG = 'IP' THEN 'P'
WHEN FLAG = 'IH' THEN 'H'
WHEN FLAG = 'IM' THEN 'M'
END
WHERE ADJUSTMENT_ID IN (SELECT Query )
此更新从返回void 的Java 函数执行。
现在我还需要获取更新记录的详细信息(表 TABLE 中的几列)并从函数返回 LIST 而不是 void。
由于性能原因,不能先运行 SELECT,然后在循环中更新记录。使用单个 UPDATE 语句更新记录,因为它应该运行得更快。
我有哪些选择可以保持可比性能?我应该使用存储过程吗?
【问题讨论】:
-
不相关,但是:如果
flag包含除IP、IH或IM之外的任何其他值,则该列将更新为null。如果where子句可能选择具有其他值的行,则应在case语句中添加else flag -
谢谢,查询中的 where 子句可以解决这个问题。我错过了提到这一点。这个条件存在于 WHERE 子句
AND FLAG IN ('IP','IH','IM')