不确定我是否在这里使用了正确的问题名称,请随时提出修改建议
假设表结构如下:
Jobs Table:
|jobID|jobName|
---------------
|1 | Test_1|
|2 | Test_2|
|3 | Test_3|
jobType Table:
|jobTypeID| jobId| jobTypeValueId |
--------------------
|1 | 1| 57|
|2 | 1| 64|
|3 | 1| 23|
|4 | 2| 64|
|5 | 2| 23|
|6 | 3| 64|
|7 | 3| 99|
jobType 外键 - jobId、jobTypeValueId,我的意思是暗示 (jobid, jobTypeValueId) 是唯一的。
假设我试图返回 jobId 2;我如何查询所有关联的 jobTypeValueId 记录为 23 和 64 且仅这些记录的作业?
我尝试过的事情:
SELECT *
FROM job j
LEFT
JOIN jobType jt
on j.jobId = jt.jobId
WHERE jt.jobTypeValueId = 23
AND jt.jobTypeValueId = 64
SELECT *
FROM job j
LEFT
JOIN jobType jt
on j.jobId = jt.jobId
AND jt.jobId = 23
LEFT
JOIN jobType jt2
on j.jobId = jt2.jobId
AND jt.jobId = 64
WHERE jt.jobTypeValueId = 23
AND jt2.jobTypeValueId = 64
SELECT *
FROM job j
LEFT
JOIN jobType jt
on j.jobId = jt.jobId
WHERE jt.jobTypeValueId IN (23, 64)
GROUP
BY j.jobId
HAVING COUNT(DISTINCT jt.jobTypeValueId) = 2
最后一个例子是我来过的最接近的例子 - 但它也会返回 jobId 3,因为返回的作业之一 jobType 行与 WHERE jt.jobTypeValueId IN (23, 64)
中的值之一匹配
感谢所有帮助!