对不起,标题不是那么好,至少可以说。
在我的CUSTOMER表中,我有4列电话号码:P1,P2,P3,P4。 我还有一列告诉我,根本没有电话号码:NOPHONE的值为1或0(我知道这听起来很愚蠢,但这是一个很长的故事,所以就是这样。)
每当我没有电话号码时,该值为1(它也有其原因)。
现在,我要做的是更新所有具有0的电话号码,并将值更改为NULL ...除了那些NOPHONE = 1的记录(并且P1 = P2 = P3 = P4 = 0),它应保持原样(即0)。
如何在1个SQL语句中执行此操作?
谢谢!
答案 0 :(得分:3)
使用CASE
语句有条件地设置值。如果要保留当前值,只需将其设置为自身。 WHERE
子句检查是否需要更改至少一列。
UPDATE CUSTOMER
SET
P1 = CASE WHEN P1 = 0 THEN NULL ELSE P1 END,
P2 = CASE WHEN P2 = 0 THEN NULL ELSE P2 END,
P3 = CASE WHEN P3 = 0 THEN NULL ELSE P3 END,
P4 = CASE WHEN P4 = 0 THEN NULL ELSE P4 END
WHERE NOPHONE = 0
AND (P1 = 0 OR P2 = 0 OR P3 = 0 OR P4 = 0)
你的NOPHONE
逻辑似乎倒退了。直觉上我希望NOPHONE = 1
表示没有可用的电话号码,但你的问题完全是另一种方式。
答案 1 :(得分:2)
UPDATE Customer
SET P1 = NULLIF(P1, 0), P2 = NULLIF(P2, 0), P3 = NULLIF(P3, 0), P4 = NULLIF(P4, 0)
WHERE NOPHONE = 0