簡體   English   中英

MySQL - 帶連接的GROUP_CONCAT

[英]MySQL - GROUP_CONCAT with joins

我的問題與MySQL非常相似:是否可以group_concat多行? ,但我無法理解小組聯合會如何運作。

我的實際數據集很難解釋 - 我將使用一組簡化的表和關系作為示例。

說我有一張桌子photos

id  filename
1   bob.jpg
2.  ken.png
3.  lisa.jpg
4.  jim.jpg
...

和一個表tags

id  title
1   family
2   friends
3   school
4   california
...

還有一座叫做photo_tags的橋梁

photo  tag
1      2
1      3
1      4
2      1
3      1

我想要這樣的行:

photo_id  filename   tags
1         bob.jpg    2,3,4
2         ken.png    1
3         lisa.jpg   1
4         jim.jpg    (NULL)

要么...

photo_id  filename   tags
1         bob.jpg    friends,school,california
2         ken.png    family
3         lisa.jpg   family
4         jim.jpg    (NULL)

我最初的猜測是這樣的:

SELECT photos.filename,
GROUP_CONCAT(photo_tags.tag) AS associated_tags
FROM photos
LEFT OUTER JOIN tags
ON tags.photo = photos.id
GROUP BY photo_tags.tag

但是(對於知道自己在做什么的人來說可能很明顯),這些都行不通。 經過一些研究,並參考上面的鏈接,我嘗試了各種這樣的排列:

SELECT 
  file_name,
  GROUP_CONCAT(photo_tag_ids) AS associated_tags
FROM (
  SELECT 
    photos.filename AS file_name,
    photo_tags.tag AS photo_tag_ids
  FROM  
    photos
    INNER JOIN photo_tags
         ON photo_tags.photo= photos.id
) whatever
GROUP BY file_name
ORDER BY file_name;

TYIA。

SELECT photos.filename,
       GROUP_CONCAT(photo_tags.tag) AS associated_tags
FROM photos
LEFT OUTER JOIN tags ON tags.photo = photos.id
GROUP BY photos.filename

您必須按每個行唯一的列進行分組,並且可以在組中構建其他列的group_concat。 因此,將您的group by更改為photos.filename

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM