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的{​​{1}}。

例如,我想在criteria_id中搜索job_id。它应该返回带有示例数据的6(仅criteria_id IN (5,7) = 6匹配两个job_id

经过一些搜索,我使用了这个查询:

criteria_ids

它有效,但是此查询不容易扩展。我使用来自PHP框架的查询生成器,很难构建这种查询。

有没有更简单的方法来实现这一目标?

xjqjz 回答:MySQL-获取同一表中的行的交集

您可以使用分组查询来计算给定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

输出

{{1}}

Demo on dbfiddle

本文链接:https://www.f2er.com/3163877.html

大家都在问