Puis-je utiliser '= TOUS " dans une Requête SQL?
Je suis en train d'utiliser un '= ALL'
l'aide d'un paramètre et d'un ensemble de résultats à partir d'une sous-requête comme ceci:
SELECT table.something
FROM Table t
WHERE t.param = ALL (... sub-query...)
est-ce possible? parce que je sais ce que le résultat doit être et je n'obtiens pas de résultats à tous les...
- dev.mysql.com/doc/refman/5.0/en/all-subqueries.html
- Avec cette syntaxe, vous obtiendrez seulement les résultats pour lesquels ce paramètre est égal à tous les éléments retournés par la sous-requête.
- Ce qui est
t.param
? N'aurait-il pas être un tableau ou quelque chose? - Il peut aider à illustrer ce que vous attendez pour certaines entrées, comme il n'est pas en cristal clair ce que vous attendez.
Vous devez vous connecter pour publier un commentaire.
Oui, c'est possible:
http://dev.mysql.com/doc/refman/5.0/en/all-subqueries.html
Si vous n'obtenez pas les résultats que vous attendez, je devine qu'il y a un problème avec la requête. La façon dont il est actuellement rédigé, tous les résultats de la sous-requête doit correspondre à
t.param
's (qui ne fait pas beaucoup de sens en dehors du contexte).Il n'a de sens que si la sous-requête ne jamais renvoie une valeur unique.
Si la sous-requête renvoie plusieurs valeurs, vous n'aurez pas les lignes correspondantes. Il n'y a aucune valeur ne peut être égal à deux autres valeurs simultanément.
Si la sous-requête, par exemple renvoie 1 et 2, et votre tableau contient la valeur 2, qu'il ne correspond pas, car la valeur 2 n'est pas égal à 1 et 2.
Donc, en utilisant le
ALL
mot-clé avec le=
opérateur est en fait assez inutile. Je pense que vous voulez utiliser laANY
mot-clé ou l'IN
opérateur à la place.SELECT t.ID FROM MyTable t WHERE t.ID = ALL (SELECT t2.ID FROM MyTable t2 WHERE t2.ID = t.ID);
- est de la sous-requête vraiment que de les retourner une valeur ici?t
, et chaque fois que la valeur det2.ID
ne peut pas être autre chose que l'égalité det.ID
, car c'est ce que vous avez spécifié dans la condition.ID
dansMyTable
puis le même sous-requête retournera trois valeurs différentes, à droite? C'est assez différent de "ne jamais renvoie une valeur unique", ne pensez-vous pas?C'est la forme utilisée, je n'ai pas entendu de
ALL
:Pour un
names
table de ceci:La requête:
Sera de retour ce:
1,6,2,6,11,56
, alors tous vostable
enregistrements à l'un de ceuxparam
valeurs seront retournés.