SQL When语句使用If When

Tri*_*Nad 4 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

Joh*_*Woo 6

简单地用 COALESCE

UPDATE  tableName
SET     day_phone = COALESCE(day_phone, sec_phone, alt_phone, cell_phone)
Run Code Online (Sandbox Code Playgroud)

如果你想只更新day_phone为null,那么你可以添加额外的条件,

UPDATE  tableName
SET     day_phone = COALESCE(sec_phone, alt_phone, cell_phone)
WHERE   day_phone IS NULL
Run Code Online (Sandbox Code Playgroud)

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