mysql:连接表 + 使用 AND 样式查询查找记录,而不是 OR

标签 mysql sql sql-match-all

注意:使用MySQL 4.0,即没有子查询(目前)。

我有 2 个表:

  • 一个“user_details”表
  • “技能”表,其中包含 user_id 和“skill_id”,映射到其他地方定义的一组预定义技能。

当前查询允许管理员通过选择技能来搜索用户,并且查询以 OR 方式工作,例如:

LEFT JOIN skills 
ON (ud.user_id = skills.user_id)  
WHERE skills.skill_id in (51, 52, 53, 54, 55)
GROUP BY ud.user_id

这会返回太多记录,因此我希望此搜索字段以 AND 方式工作,用户必须具备所有选定的技能才能在搜索中返回。

如果子查询是最佳选择,则可能升级 MySQL。

edit:与 group by、count、having 等有关。您可以根据返回多少匹配行的要求来限制 group by 命令吗? (例如本例中的 5)。

edit2:测试:

HAVING COUNT( * ) > 5

最佳答案

您不需要子查询或连接。

SELECT user_id
FROM skills
WHERE skill_id IN (51, 52, 53, 54, 55)
GROUP BY user_id
HAVING COUNT(*) = 5;

关于mysql:连接表 + 使用 AND 样式查询查找记录,而不是 OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/361477/

相关文章:

php - 如何使用 LIKE 从 3 个表中进行选择

mysql - 将 csv 加载到 mysql 表中

sql - 如何使用 to_date 函数转换复杂的 sysdate + 其他内容?

mysql - 从桥接表中获取组 key

mysql - 从 MySQL 中以字符分隔的文本字段中搜索项目

php - 使用 WHERE 选择多行

php - 为什么使用错误登录时错误消息不起作用?

php - 我需要从 mysql 数据库获取日期并打印今天和获取日期之间的差异

sql - 复合主键限制?

c# - 我如何将此 SQL 翻译成 LINQ? (按人气排序)