mysql - Select from table1 WHERE table2 包含所有搜索参数

标签 mysql where-clause

我有两个表(注释和标签)。标签有注释的外键。一个笔记记录可能有多个标签记录。

我试图只选择包含所有所需标签的笔记。

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/

相关文章:

带有空值的 MySQL where 子句

mysql - 如何在 elasticsearch 中编写此查询?

php - 如何在 Laravel 5.1 Integrity constraint violation : 1452? 中添加外键

mysql - 如何选择MySQL表中除最后一项之外的所有条目?

mysql - 对同一个表使用相同 WHERE 子句的两个不同查询

mysql - 将 2 个表连接在一起并使用基于单独 mysql 查询的 where 函数

php - 搜索结果中的 Opencart 默认过滤器

php - 我的网站被黑客攻击,错误 MYSQL Access拒绝用户 'user' @'localhost'(使用密码 : YES)

sql - 如何编写仅在 where 子句中使用的函数,该函数在没有比较运算符的情况下计算为 true?

MySQL 选择值 = 0 的位置