Enfin ! Du coup je vais m'abstenir de répondre en détail à ton avant dernier message.
En principe, ce n'est pas un truc propre à MySQL, c'est le fonctionnement normal du traitement du (NOT) EXISTS.Citation:
J'aurai dû commencer par lire la doc MySql.
Mysql ignore le select et de ce fait, la syntaxe n'a aucune importance. Je constate qu'il y a bien des différences de fonctionnement entre DB2 et MySql.Citation:
Traditionally, an EXISTS subquery starts with SELECT *, but it could begin with SELECT 5 or SELECT column1 or anything at all. MySQL ignores the SELECT list in such a subquery, so it makes no difference.
Le fonctionnement ne change pas. On se fout de ce qu'il y a après le SELECT dans la sous-requête du (NOT) EXISTS. On met quelque chose (* ou 1 ou NULL ou autre chose) pour que ce soit syntaxiquement correct pour l'analyseur syntaxique du SGBD mais ce qu'on y met n'a aucune importance.Citation:
Même si la syntaxe reste très similaire et respecte la nomenclature SQL, aussi bien avec DB2 et MySql, le fonctionnement peut parfois différer de part les choix des développeurs.
Chez Postgresql, on trouve ceci :
Ils choisissent d'indiquer la forme commune SELECT 1 mais précisent bien que la "la liste de sortie de la sous-requête est normalement inintéressante". Le SELECT 1 n'est qu'une convention.Citation:
Since the result depends only on whether any rows are returned, and not on the contents of those rows, the output list of the subquery is normally uninteresting. A common coding convention is to write all EXISTS tests in the form EXISTS(SELECT 1 WHERE ...).