【发布时间】:2016-06-13 08:33:15
【问题描述】:
当我使用这个语句时;
UPDATE TABLE
SET FIELD = CASE
WHEN NAME = 'a' THEN (SELECT NO FROM TABLE_TWO WHERE NAME = 'a')
ELSE 'x' END
WHERE FIELD_TWO = 1
如果TABLE.NAME != 'a' 会执行select SQL 吗?
此外,还有一点额外的问题,您认为在任何给定产品的 SQL 代码中都有这样的逻辑是否合适?我认为在 SQL 中包含任何逻辑都会使其覆盖变得非常困难,并且难以维护,您怎么看?
edit:select语句只返回单个值,忽略可以返回多个值的情况,这种情况不在本题讨论范围内。
【问题讨论】:
-
您使用的是哪个 DBMS?一般来说: CASE 语句没有“快捷方式”,因此很可能会为
where子句选择的每一行执行嵌套选择。但这确实取决于所使用的 DBMS。 -
目前我使用的是Oracle 12g