我有两张桌子:
Departament
id_dep, name_dep
员工
id_dep, salary
我想获得所有工资都低于7000的部门的名称。我必须创建一个SELECT
语句。我是SQL的初学者,如果我会浪费你的时间,我很抱歉,但我需要帮助。
我有一个解决方案,但我不知道是否好:
SELECT name_dep
FROM departments
WHERE employee.salary < 7000
MINUS
SELECT name_dep
FROM departments
WHERE employee.salary >= 7000
答案 0 :(得分:6)
您可以使用NOT EXISTS
执行此操作:
SELECT id_dep , name_dep
FROM department AS d
WHERE NOT EXISTS (SELECT 1
FROM employee AS e
WHERE e.id_dep = d.id_dep AND e.salary >= 7000)
答案 1 :(得分:0)
将JOINs
添加到原始MINUS
次尝试中:
SELECT d.name_dep
FROM departments d
JOIN employee e ON d.id_dep = e.id_dep
WHERE e.salary < 7000
MINUS
SELECT d.name_dep
FROM departments d
JOIN employee e ON d.id_dep = e.id_dep
WHERE e.salary >= 7000
答案 2 :(得分:0)
您可以使用NOT EXISTS
或EXISTS
,针对您的问题尝试此代码块。
NOT EXISTS
select d.name_dep
from department as d
where not exists (select 1
from employee as e
where e.id_dep = d.id_dep
and e.salary >= 7000)
group by d.dep_name
<强> EXISTS 强>
select d.name_dep
from department as d
where exists (select 1
from employee as e
where e.id_dep = d.id_dep
and e.salary < 7000)
group by d.dep_name
答案 3 :(得分:0)
您可以按部门分组并检查组中的最高工资:
select d.id_dep, d.name_dep
from department d
join employee e on d.id_dep = e.id_dep
group by d.id_dep, d.name_dep
having max(e.salary) < 700