我试图更新一个列,如果它的列为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
简单地用 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.