【问题标题】:Joining values of columns?连接列的值?
【发布时间】:2012-01-12 18:50:22
【问题描述】:

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

【问题讨论】:

  • 您的问题是用户可能多次更改他们的姓名,因此您想在一行中显示他们的每个姓名更改?
  • 不,左外连接恰好选择了最近的名称更改,我已经确定了这一点。我只想将结果合并在一起,这样如果列出了名称更改,它将显示该名称而不是原始(登录)名称。我会看看你下面的答案!

标签: mysql sql merge


【解决方案1】:

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

【讨论】:

  • 预览此查询时(使用 DBKiss,一种管理数据库的 PHP 工具)我收到以下错误:错误:“字段列表”中的未知列“data_dnames_change.dbname_current”(1054)
  • @RevZ 因为我将您的专栏拼错为dbname_current 而不是dname_current。上面固定。
猜你喜欢
  • 1970-01-01
  • 2010-11-05
  • 2021-07-22
  • 2021-11-17
  • 1970-01-01
  • 2017-12-15
  • 2015-12-25
  • 2011-03-18
  • 2021-09-28
相关资源
最近更新 更多