mariadb 查询与多个TagId匹配的EventId

0lvr5msh  于 6个月前  发布在  其他
关注(0)|答案(3)|浏览(53)

我有一个多对多的表,它同时保存EventId和TagId。

+-------+---------+
| TagId | EventId |
+-------+---------+
|   150 |   61096 |
|   149 |   61096 |
|   149 |   61095 |
+-------+---------+

如何查询与TagId 149和TagId 150都匹配的EventId?
预期结果:

+---------+
| EventId |
+---------+
|   61096 |
+---------+
guz6ccqo

guz6ccqo1#

SELECT DISTINCT EventId
FROM table t1
JOIN table t2 USING (EventId)
WHERE t1.TagId = 149
  AND t2.TagId = 150

如果(EventId, TagId)是唯一的,则不需要DISTINCT。

wlp8pajw

wlp8pajw2#

这可以通过以下方式完成:

SELECT EventId
FROM Events_Tags
WHERE TagId IN (149, 150)
GROUP BY EventId
HAVING COUNT(CASE WHEN TagId = 149 then 1 end) = 1  AND COUNT(CASE WHEN TagId = 149 then 1 end) = 1;

或者简单地说:

SELECT EventId
FROM Events_Tags
WHERE TagId IN (149, 150)
GROUP BY EventId
HAVING COUNT(DISTINCT TagId) = 2;

Demo here

bjp0bcyl

bjp0bcyl3#

这适用于查找至少具有以下两个标记的事件:

SELECT EventId
FROM Events_Tags
WHERE TagId IN (149, 150)
GROUP BY EventId
HAVING COUNT(DISTINCT TagId) = 2;

相关问题