标题很糟糕,希望这个例子能澄清这一点 我有一个活动。活动有标签 (简体)我这样展示了这个事件:
SELECT
*.event,
GROUP_CONCAT(tag.name)
FROM event
JOIN tag
ON event.tag_id = tag.id
GROUP BY event.id
说我想过滤它,只获取那些tag.id = 2的事件 但仍然显示整个事件,包括所有标签。
SELECT
*.event,
GROUP_CONCAT(tag.name)
FROM event
JOIN tag
ON event.tag_id = tag.id
WHERE tag.id = 2
GROUP BY event.id
这不起作用,因为它会正确显示事件详细信息,但只显示其标记为2
我很确定我错过了一些非常简单的东西,它是什么? : - )
我知道的解决方案:
GROUP_CONCAT(tag.name)
来获取当前事件代码对我来说,两者似乎都“不干净”。
答案 0 :(得分:1)
SELECT
event.*,
GROUP_CONCAT(tag.name)
FROM event
JOIN tag
ON event.tag_id = tag.id
JOIN event AS event2
ON event2.id = event.id
AND event2.tag_id = 2
GROUP BY event.id
或:
SELECT
event.*,
GROUP_CONCAT(tag.name)
FROM event
JOIN tag
ON event.tag_id = tag.id
WHERE EXISTS
( SELECT *
FROM event AS event2
WHERE event2.id = event.id
AND event2.tag_id = 2
)
GROUP BY event.id