MySQL使用GROUP_CONTACT中的DISTINCT与输出

时间:2017-02-01 15:28:39

标签: mysql

我正在尝试将GROUP_CONCAT与DISTINCT一起使用,但是通过在不同的列上执行区分。 例如,我这样做:

GROUP_CONCAT(DISTINCT tags.tag SEPARATOR ' ') as tags"

但是标签可能是具有不同ID的相同字符,所以我需要做这样的事情:

GROUP_CONCAT(DISTINCT(tags.tag_id) tags.tag SEPARATOR ' ') as tags"

但是我找不到任何关于这个,有什么想法吗?

SIMPLIFIED表数据示例(模型和SQL请求在使用多个连接和表时要复杂得多):
表:
item_id 标题,...
1,史密斯,...... 2,鲍勃,...... ...

标签表:
tag_id 标记 item_id ,...
1,蒙特利尔,1,...... 2,多伦多,1,...... 3,多伦多,1,...... 4,纽约,2,...... ...

MySQL查询:

...
SELECT items.item_id, items.title,
GROUP_CONCAT(DISTINCT tags.tag_id SEPARATOR ',') as tag_ids",
GROUP_CONCAT(DISTINCT tags.tag SEPARATOR ' ') as tags"
LEFT JOIN tags ON items.item_id = tags.item_id
GROUP BY items.item_id
..

预期结果:
item1.title =“史密斯”
item1.tag_ids =“1 2 3”
item1.tags =“蒙特利尔多伦多多伦多”
...

实际结果:
item1.title =“史密斯”
item1.tag_ids =“1 2 3”
item1.tags =“蒙特利尔多伦多”< - 因为不确定因素而导致失败 ...

注意: 我想避免像

这样的子查询
SELECT WHERE tags.item_id IN(SELECT ...)

1 个答案:

答案 0 :(得分:0)

我不是100%确定你想要什么,但如果我是对的,你需要不同的tag_ids然后相应的标签名称,所以'蒙特利尔多伦多多伦多'对你来说没问题:

SELECT item_id,
       GROUP_CONCAT(tag_id SEPARATOR ' ') AS tag_ids,
       GROUP_CONCAT(tag SEPARATOR ' ') AS tags
FROM
    (SELECT items.item_id AS item_id,
            tags.tag_id AS tag_id,
            tags.tag AS tag
     FROM items
     JOIN tags ON tags.item_id = items.item_id
     GROUP BY 1,
              2) AS distinct_groups
GROUP BY item_id