在多个条件下加入表格

时间:2021-03-30 14:10:51

标签: mysql

不确定我是否在这里使用了正确的问题名称,请随时提出修改建议

假设表结构如下:

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) 中的值之一匹配

感谢所有帮助!

0 个答案:

没有答案