SQL When语句使用If When

时间:2013-04-24 13:33:26

标签: sql sql-update

我正在尝试更新一个列,如果它的列为null,则仅当该列不为空时才使用另一列的值。如果为null,则使用第3列更新第1列

以下是一个例子:

day_phone       sec_phone       alt_phone       cell_phone
555-555-1212    NULL            NULL            NULL
NULL            555-555-1234    NULL            NULL
NULL            NULL            555-555-4321    NULL
NULL            NULL            NULL            555-555-5678
NULL            555-123-4567    555-867-5309    NULL

所以我想要完成的是更新所有记录,以便day_phone最终得到一个结果,最好是在多列中有记录时找到的第一个记录。最终结果应如下所示:

day_phone       sec_phone       alt_phone       cell_phone
555-555-1212    NULL            NULL            NULL
555-555-1234    555-555-1234    NULL            NULL
555-555-4321    NULL            555-555-4321    NULL
555-555-5678    NULL            NULL            555-555-5678
555-123-4567    555-123-4567    555-867-5309    NULL

2 个答案:

答案 0 :(得分:6)

只需使用COALESCE

即可
UPDATE  tableName
SET     day_phone = COALESCE(day_phone, sec_phone, alt_phone, cell_phone)

如果您只想在day_phone为空时更新,则可以添加额外条件

UPDATE  tableName
SET     day_phone = COALESCE(sec_phone, alt_phone, cell_phone)
WHERE   day_phone IS NULL

这将使更新更快,因为只更新选定的行。如果列day_phone上有索引,则速度会快得多。

答案 1 :(得分:0)

最简单的方法是一系列更新语句。

UPDATE table_name
SET column1=column2
WHERE column1 IS NULL
AND column2 IS NOT NULL

重复第3,4列等...按优先顺序运行。

http://www.w3schools.com/sql/sql_null_values.asp

http://www.w3schools.com/sql/sql_update.asp