我有两个表(注释和标签)。标签有注释的外键。一个笔记记录可能有多个标签记录。
我试图只选择包含所有所需标签的笔记。
SELECT notes.*, tags.* FROM notes LEFT JOIN tags ON notes.id = tags.note_id
WHERE {my note contains all three tags I would like to search on}
使用 WHERE tag.name IN ('fruit','meat','vegetable') 将返回所有带有“fruit”、“meat”或“vegetable”标签的笔记。我只想返回包含所有三个“水果”、“肉”和“蔬菜”标签的笔记。
我可以带回多条记录(上面的查询将为每个标签生成一条记录)。
我的 where 子句需要帮助。是否可以在没有子选择的情况下执行此操作?
最佳答案
假设 tags(note_id, tag) 被声明为 UNIQUE 或 PK,那么你可以使用:
SELECT note_id, COUNT(tag) FROM tags
WHERE tag IN ('fruit', 'vegetable', 'meat')
GROUP BY note_id
HAVING COUNT(tag) >= 3
根据以下 OP 的评论进一步回答。获取匹配记录的所有标签:
SELECT * FROM tags
INNER JOIN
(
SELECT note_id, COUNT(tag) FROM tags
WHERE tag IN ('fruit', 'vegetable', 'meat')
GROUP BY note_id
HAVING COUNT(tag) >= 3
) search_results
ON search_results.note_id = tags.note_id
关于mysql - Select from table1 WHERE table2 包含所有搜索参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1765534/