QuentinC, tu es sur que ta requête fonctionne ?
JE n'ai absolument pas testé, j'ai tapé le code directement dans la zone de réponse. Mais je suis sûr à 99% que ça fonctionne, moyennant peutêtre des erreurs de syntaxe basiques.
Par contre tu n'as pas répondu à la question la plus importante et pour moi le contexte n'est pas totalement clair: Quel est le but ?
Dit autrement, qu'est-ce que tu cherches à obtenir ?
Parce que si ça se trouve ma réponse est complètement à l'ouest, et en fait je crois qu'effectivement à te lire maintenant j'ai répondu à une question que tu ne te posais pas.
Si on admet que la table user1 contient {A, B, C, D, E} et user2 {C, D, E, F, G}, alors la requête que j'ai suggéré ce matin te retournera {A, B}, et la remarque qui suit te permettra d'obtenir {A, B, F, G}.
Sans même essayer, je pense que ta requête à toi te renverra {A, B, C, D, E, F, G}. Est-ce bien ce que tu souhaites ? Par contre je ne pense pas que ce soit la manière la plus efficace d'y arriver.
Si tu veux bel et bien {A, B, C, D, E, F; G}, je pense que ceci est plus rapide que ce que tu proposes :
| select nom from user1
union
select nom from user2 u2
where not exists( select nom from user1 u1 where u1.nom=u2.nom)
|
A condition qu'il y ait des index sur les noms, à mon avis not in est beaucoup plus lent.