您对此结果的正确查询是什么:
+---------------------------------------+
item_id | item_title | tag_list |
----------------------------------------+
1 | Title 1 | tag1 , tag2, tag3|
2 | Title 2 | tag7 , tag2 |
3 | Title 3 | tag9 , tag5, tag4|
4 | Title 4 | tag7 , tag6, tag3|
-----------------------------------------
我有以下表格:
SQL小提琴 - > http://sqlfiddle.com/#!2/33dea8/1
我尝试了以下查询但没有成功:
SELECT
items.item_id,
items.title,
(
SELECT GROUP_CONCAT(DISTINCT tags.tag_name)
FROM tags
INNER JOIN items_tags_xref
ON tags.tag_id = items_tags_xref.tag_id
INNER JOIN items
ON items_tags_xref.item_id = items.item_id
WHERE items_tags_xref.item_id = items.item_id
) AS tag_list
FROM items
上述查询的结果显示了tag_list
中的所有tag_names但是如果我这样做的话:
SELECT
items.item_id,
items.title,
(
SELECT GROUP_CONCAT(DISTINCT tags.tag_name)
FROM tags
INNER JOIN items_tags_xref
ON tags.tag_id = items_tags_xref.tag_id
INNER JOIN items
ON items_tags_xref.item_id = items.item_id
WHERE items_tags_xref.item_id = 4
) AS tag_list
FROM items
“4是一个特定的item_id”我只得到该项目的正确结果。如果我在tag_list ..
中使用items.item_id时只有4是动态的我正试图解决这个问题好几天,一直在谷歌搜索答案,但找不到任何东西。也许我使用了错误的关键字:(但如果有人能给我至少一个关于如何做到这一点的提示。这将非常有帮助。谢谢!
答案 0 :(得分:0)
我有点困惑,问题的哪个部分会导致以下问题无法解决?
SELECT i.*
, GROUP_CONCAT(tag_name) tags
FROM items i
JOIN items_tags_xref it
ON it.item_id = i.item_id
JOIN tags t
ON t.tag_id = it.tag_id
GROUP
BY i.item_id;
http://sqlfiddle.com/#!2/33dea8/6
此外,items_tags_xref表上的代理键似乎完全是多余的,因为其余列将作为完全可行的复合自然PRIMARY KEY