我有一个查询,它在一个板上获取用户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'列,替换该列相应行中已有的任何值?
答案 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