我的数据库有以下两个表
工作:
+----+--------------+
| id | name |
+----+--------------+
| 1 | Mechanic |
| 2 | Programmer |
| 3 | Cleaner |
| 4 | Truck driver |
+----+--------------+
资格:
+--------+--------------------+
| job_id | qualification |
+--------+--------------------+
| 1 | drivers_license |
| 1 | engine_certificate |
| 2 | mysql_certificate |
| 4 | drivers_license |
+--------+--------------------+
让我们说我有一个drivers_license和一个mysql_certificate。我想创建一个SQL查询,返回所有没有要求的工作。因此查询的结果应该是作业ID 2,3和4。
我尝试了以下查询:
select *
from jobs j
join qualifications q
on j.id = q.job_id
where q.qualification = 'drivers_license' ||
q.qualification = 'mysql_certificate';
返回id 1,2和4,因此显然不起作用。
如何在SQL中实现这一目标?非常感谢任何帮助。
答案 0 :(得分:1)
您可以使用group by
和having
:
select j.name, j.id
from jobs j join
qualifications q
on j.id = q.job_id
group by j.name, j.id
having sum(q.qualification not in ('drivers_license' , 'mysql_certificate')) = 0;