Mysql 当只有一个匹配就足够时,如何显示整个组

Mysql 当只有一个匹配就足够时,如何显示整个组,mysql,sql,Mysql,Sql,标题不好,希望示例能够澄清这一点。 我有一件事。事件具有标记。 (简化)我以如下方式展示该事件: 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(ta

标题不好,希望示例能够澄清这一点。
我有一件事。事件具有标记。
(简化)我以如下方式展示该事件:

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\u CONCAT(tag.name)
    获取当前事件标记
  • 在我看来,两者都“不干净”

    或:


    由于MySql的内部查询存在一些问题,您的第一个解决方案要好得多-谢谢!
    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