mysql - Mysql - 获取同一表中的行交集
问题描述
我有这个简单的表(称为jobs_criterias
):
+-----------+---------+-------------+
| id | job_id | criteria_id |
+-----------+---------+-------------+
| 101 | 4 | 3 |
| 105 | 6 | 5 |
| 130 | 8 | 5 |
| 132 | 9 | 5 |
| 133 | 6 | 7 |
| 150 | 7 | 8 |
| 160 | 8 | 9 |
+-----------+---------+-------------+
我想找到job_id
相同的criteria_id
。
例如,我想job_id
搜索criteria_id IN (5, 7)
. 它应该返回 6 和样本数据(只有job_id
= 6 匹配两者criteria_ids
)
经过一些搜索,我使用了这个查询:
SELECT DISTINCT
job_id
FROM jobs_criterias jc1
INNER JOIN jobs_criterias jc2 USING(job_id)
WHERE jc1.criteria_id = 5 AND jc2.criteria_id = 7
它可以工作,但这个查询不容易扩展。我使用 PHP 框架中的查询构建器,很难构建这种查询。
有没有更简单的方法来实现这一点?
解决方案
您可以使用分组查询来计算criteria_id
给定job_id
匹配的数量,仅选择与所有匹配的那些:
SELECT job_id
FROM jobs_criterias
WHERE criteria_id IN (5, 7)
GROUP BY job_id
HAVING COUNT(DISTINCT criteria_id) = 2
输出
6
推荐阅读
- javascript - Vuex:在“beforeDestroy”生命周期钩子中取消注册模块抛出 parent.getChild 未定义
- excel - 通过条件格式计算彩色单元格(大于/小于)
- python - 分组数据框的箱线图
- java - 有没有办法以这种方式替换此代码?
- google-apps-script - 在第二个以第一个命名后,将单元格值从一个电子表格复制到第二个
- wysiwyg - Strapi 中的文本字段缺少所见即所得复选框
- python - Pandas 列 - 将字符串转换为特定的日期格式
- python - 在python中读取由换行符分隔的json
- python - 从另一个带有参数的笔记本运行 Jupyter 笔记本
- c++ - 如何使用 AWS C++ SDK 在给定的开始和结束日期范围内列出 S3 中的文件