加入列的值?

时间:2011-12-04 20:33:32

标签: mysql sql merge

我有一个查询,它在一个板上获取用户ID列表及其相应的用户名,但是从另一个表中获取一个列,该列在对应于该用户ID的行上具有值(名称),如果所述用户具有改了名字。使用外连接,我得到了三个很好的显示,如下面几个结果的例子:

member_id    name             dname_current
1            Blablabla1       blablabla2
2            Bla4444          
3            RevZ             
5            Herpaderp42      
6            Lalalala         
7            Kaboom           
14           testtesttest21   Formula21
15           Alex             Ethan
16           Bob              Radio3

获取三列的SQL查询如下:

SELECT
  data_members.member_id, 
  data_members.name,
  data_dnames_change.dname_current
FROM data_members LEFT OUTER JOIN data_dnames_change
    ON data_members.member_id = data_dnames_change.dname_member_id
GROUP BY data_members.member_id

有没有办法显示这个,以便它合并“dname_current'中存在的值?将另一个表的列放入' name'列,替换该列相应行中已有的任何值?

1 个答案:

答案 0 :(得分:3)

COALESCE()会返回第一个非空值,因此您可以执行以下操作,使dbname_current优先于data_members.name,除非它为NULL:

SELECT
  data_members.member_id, 
  COALESCE(data_dnames_change.dname_current, data_members.name) AS name
FROM data_members LEFT OUTER JOIN data_dnames_change
    ON data_members.member_id = data_dnames_change.dname_member_id
GROUP BY data_members.member_id

应该返回:

member_id    name
1            blablabla2
2            Bla4444
3            RevZ
5            Herpaderp42
6            Lalalala
7            Kaboom
14           Formula21
15           Ethan
16           Radio3