两张桌子。一对多。如何找到绝对所有员工在IT部门工作且薪水超过15万美元的所有公司?
[COMPANIES]
|----|--------------|
| id | company_name |
|----|--------------|
| 1 | Google |
| 2 | Apple |
|----|--------------|
[EMPLOYEES]
|----|------------|------|------------|--------|
| id | company_id | name | department | salary |
|----|------------|------|------------|--------|
| 1 | 1 | John | IT | 200000 |
| 2 | 1 | Bob | IT | 200000 |
| 3 | 2 | Rick | Design | 100000 |
| 4 | 2 | Bill | Design | 100000 |
|----|------------|------|------------|--------|
答案 0 :(得分:2)
我认为你可以使用having
子句得到你想要的东西:
select company_id
from employees
group by company_id
having min(department) = max(department) and
min(department) = 'IT' and
min(salary) >= 150000;
如果您想要公司名称,可以加入:
select c.id, c.company_name
from companies c join
employees e
on c.id = e.company_id
group by c.id, c.company_name
having min(department) = max(department) and
min(department) = 'IT' and
min(salary) >= 150000;
答案 1 :(得分:2)
您可以使用EXISTS
+ NOT EXISTS
:
SELECT c.*
FROM COMPANIES c
WHERE EXISTS
(
SELECT 1 FROM EMPLOYEES e
WHERE e.company_id = c.id
AND e.salary > 150000
AND e.department = 'IT'
)
AND NOT EXISTS
(
SELECT 1 FROM EMPLOYEES e
WHERE e.company_id = c.id
AND (e.salary <= 150000 OR e.department <> 'IT')
)