Requête SQL de type SELECT avec plusieurs conditions

Je suis coincé avec une requête SQL. Disons que nous avons un employé, une table de tâches et une association plusieurs-à-plusieurs entre eux. Les tables ressembler à ceci:

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

Maintenant je veux obtenir tous les employés, qui ont "Programmation" de leurs tâches. La bonne question est:

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'

C'est très bien... Mais maintenant je veux obtenir tous les employés, dont les tâches sont de "Programmation" et "Support". Cette requête me donne 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'

Je reçois trois enregistrements avec cette requête

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 John et 1x Mike. Mais ce n'est pas ce que je veux. Je veux que tous les employés, qui ont la tâche de "Programmation" ET "Support" - et non pas ceux, qui n'ont qu'une des tâches.

Il y a une autre option. J'utilise TOUT avec une sous-requête. Nous y voilà:

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

Mais je recevoir à cette requête NULL, bien qu'il y est un employé, qui ont deux tâches: la Jean!

Comment puis-je mettre en œuvre une telle requête?

Cordialement
Christian

OriginalL'auteur Christian | 2012-05-10