我正在尝试在 PHP 中创建 SQL 查询来更新表。
是否可以有不同的WHERE
每个受影响行的子句?
例如:
UPDATE table
SET val=X WHERE someproperty = 1,
SET val=Y WHERE someproperty = 2
etc?
任何帮助表示赞赏。谢谢
是的,您可以使用 CASE 语句。
UPDATE table
SET val = CASE someproperty
WHEN 1 THEN x
WHEN 2 THEN y
....
ELSE
val
END
现在,有人担心,一个CASE
与几个相比,语句的可读性较差UPDATE
声明。这里有一个有效的论点。例如,当更新 1000 行时,使用多个行感觉和看起来更好UPDATE
语句而不是单个条件的 1000 个不同条件CASE
.
然而,有时 CASE 语句更合适。例如,如果您根据某些特征更新行,例如表中字段值的偶数或奇数性质,则CASE
语句是一种非常简洁且可维护的方式来更新表中的行,而无需求助于大量的UPDATE
全部共享特定类型逻辑的语句。以此为例:
UPDATE table
SET val = CASE MOD(someproperty, 2)
WHEN 0 THEN x
WHEN 1 THEN y
END
该表达式采用某个属性的模,当为 0(偶数)时,将值 x 赋给 val;当为 1(奇数)时,将值 y 赋给 val。该语句更新的数据量越大,与多个语句更新的数据相比就越干净UPDATE
声明。
简而言之,CASE
语句有时与以下一样可读/可维护UPDATE
声明。这完全取决于你想用它们做什么。
EDIT:添加了 ELSE 子句以更加安全。 OP 可能只对更新特定行感兴趣,因此其余行应保持更新之前的状态。
EDIT:添加了一个场景CASE
声明是比多个更有效的方法UPDATE
声明。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)