SQL:查找所有符合特定条件的引用行的行

时间:2015-03-19 13:12:43

标签: sql sqlite

两张桌子。一对多。如何找到绝对所有员工在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 |
|----|------------|------|------------|--------|

2 个答案:

答案 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')
)

Demo