我有一个包含以下列的"messages"表:"id"、"title"、
包含以下列的"categories"表:"id"、"title"、
和具有列的"messages_categories"链接表:"message_id"、"category_id"。
让我们假设我们有ids为的messages
1,2,3和ids为的categories
1,2,3具有以下数据的messages_categories
message: 1, category: 1
message: 2, category: 1
message: 2, category: 2
message: 3, category: 1
message: 3, category: 2
message: 3, category: 3我想要找到完全匹配或更多的匹配,例如
如果我搜索类别1,我会得到消息1,2,3
如果我搜索类别1,2,我会得到消息2,3
如果我搜索类别1,2,3,我只能得到消息3
我使用了很多i,所以每个类别的加入都太多了。
我想我可以使用带有"sum"和"count"的"having"语句来查找精确的行,但这还不够好。
谢谢你的帮助,奈沃。
发布于 2016-06-06 21:12:23
如果您需要“更多”,则使用NOT EXISTS,即所谓的带提醒的关系划分。
SELECT DISTINCT messages_id
FROM messages_categories r1
WHERE NOT EXISTS
(SELECT *
FROM
(SELECT 1 as cat_id UNION SELECT 2 ) S -- id of categories needed
WHERE NOT EXISTS
(SELECT *
FROM messages_categories AS r2
WHERE (r1.messages_id = r2.messages_id)
AND (r2.category_id = S.cat_id)));发布于 2016-06-06 21:07:50
类似这样的事情可能会奏效:
SELECT DISTINCT x.message_id
FROM (
**query-that-gives-the-exact-rows-but-isnt-good-enough**
) AS xhttps://stackoverflow.com/questions/37657597
复制相似问题