【发布时间】:2019-11-04 20:37:07
【问题描述】:
我有这个简单的表(称为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 |
+-----------+---------+-------------+
我想找到具有相同criteria_id 的job_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 框架的查询生成器,很难构建这种查询。
有没有更简单的方法来实现这一点?
【问题讨论】:
-
假设
(job_id, criteria_id)上存在UNIQUE约束(或相反),您应该能够删除DISTINCT。你到底是什么问题,你想避免什么?