我使用MySQL select查询来获取地址标签中的人名和地址。可能有多个人住在同一个地址,所以我使用GROUP CONCAT将他们的名字与一个地址组合在一起。
这样我就能正确地称呼你
- 萨莉·G·布洛格斯夫人和弗雷德·史密斯先生
这很好但也给予了我
- 简·布朗夫人和哈里·布朗先生
这是不好的,因为姓氏是一样的,但它得到重复。
有没有办法做GROUP_CONCAT行,这样我得到重复的姓氏只显示一次,例如
- 萨莉·G·布洛格斯夫人和弗雷德·史密斯先生
- Jean夫人和Harry Brown先生
我使用的sql的重要部分是
SELECT
GROUP_CONCAT(
CONCAT_WS ( ' ', title , forname_1 , forename_2, surname )
SEPARATOR ' & '
) AS Salutation,
addresses.the_address
FROM
people
JOIN
addresses
ON
addresses.address_id = people.address_id
GROUP BY
people_address_id
(This文章mysql GROUP_CONCAT duplicates展示了如何从只涉及一个字段的Group_concat中删除重复项,但我不知道如何使用多字段concat的一部分来实现这一点,而这篇文章mysql GROUP_CONCAT DISTINCT multiple columns给出了一个解决方案,但使用它时出现语法错误
GROUP_CONCAT(DISTINCT CONCAT_WS(' ',头衔,前名_1,前名_2,姓氏)GROUP BY姓氏分隔符' & ')AS称呼,
3条答案
按热度按时间r6vfmomb1#
您可以在group_concat()中使用'distinct'来移除重复项。
例如,假设您有多个所有者的保险单。您有一个姓名列表和一个保险单列表。Alice和Bob都是保险单123的所有者,并且您不希望:
姓名:爱丽丝,鲍勃,爱丽丝,鲍勃
您可以用途:
在“names”和“policies”表之间的联接中。
t9eec4r02#
您的目标与您的链接问题稍有不同。您只想删除重姓,如果两个人有相同的地址,有相同的姓氏。
您可以通过两个步骤来实现此目的:
您可以使用此查询:
在此演示中查看其工作情况此解决方案考虑到了具有不同姓氏的第三人可以居住在同一地址,即岳母。
说明
内部查询
仅将居住在同一地址且具有相同姓氏的人的头衔和名字连接起来(请参见演示中的第二个查询)。
然后,我们执行与之前相同的group_concat,并在最后一步中使用
REPLACE
函数来消除双空白。cngwdvgl3#
您可以使用以下命令:
太简单了!