2013-04-24 102 views
4

我想更新一列,如果它为null与另一列的值只有如果该列也不为空。如果为空,然后用第3列SQL更新声明使用如果当

这里更新列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

回答

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

谢谢,我知道这是很简单,我只是从来没有使用之前COALESCE(SQL初学者)。 – TripleNad 2013-04-24 13:51:03

+0

不客气':D' – 2013-04-24 13:51:18