4
我遇到了SQL查询。假设我们有一个员工,一个任务表和他们之间的多对多关联。这些表看起来像这样:具有多个条件的SQL SELECT查询
employees
id|name
1 | John
2 | Peter
3 | Mike
tasks
id | name
1 | Support
2 | Programming
3 | Call customers
4 | Write Newsletters
5 | Write Invoices
employees_tasks
employee_id | task_id
1 | 1
1 | 2
2 | 3
2 | 4
2 | 5
3 | 2
现在我想让所有员工,谁有“编程”作为他们的任务。正确的查询是:
SELECT employees.id, employees.name
FROM employees
INNER JOIN employees_tasks ON employees.id = employees_tasks.employee_id
INNER JOIN tasks ON employees_tasks.task_id = tasks.id
WHERE
tasks.name LIKE 'Programming'
到目前为止好......但我现在想获得的所有员工,他们的任务是“编程” 和“支持”。该查询给了我NULL:
SELECT employees.id, employees.name
FROM employees
INNER JOIN employees_tasks ON employees.id = employees_tasks.employee_id
INNER JOIN tasks ON employees_tasks.task_id = tasks.id
WHERE
tasks.name LIKE 'Programming' AND tasks.name LIKE 'Support'
我收到三个记录与此查询
SELECT employees.id, employees.name
FROM employees
INNER JOIN employees_tasks ON employees.id = employees_tasks.employee_id
INNER JOIN tasks ON employees_tasks.task_id = tasks.id
WHERE
tasks.name IN ('Programming', 'Support')
2X约翰和1x麦克。但那不是我想要的。我希望拥有“编程”和“支持”任务的所有员工 - 而不是那些只有其中一项任务的员工。
还有另一种选择。我将ALL用于子查询。在这里,我们去:
SELECT employees.id, employees.name
FROM employees
INNER JOIN employees_tasks ON employees.id = employees_tasks.employee_id
INNER JOIN tasks ON employees_tasks.task_id = tasks.id
WHERE
tasks.name = ALL
(SELECT DISTINCT name
FROM tasks
WHERE name LIKE 'Programming' OR name LIKE 'Support')
但我收到与此查询NULL,虽然有一个员工,谁拥有这两个任务:约翰!
我该如何实现这样的查询?
问候 基督教
谢谢。这适用于两种情况。如果我有任意条件,我该如何处理它?我必须参加每个条件的表吗? – Christian
@Christian:在我上面编辑的答案中看到另一种更具扩展性的方法。 – eggyal
我也用“count”来试验“group by”和“having”。但我没有得到它的工作。非常感谢你! – Christian