Quel est le problème avec cette requête MySQL? SELECT * "x", comment utiliser x de nouveau plus tard?
La suite de requête MySQL:
select `userID` as uID,
(select `siteID` from `users` where `userID` = uID) as `sID`,
from `actions`
where `sID` in (select `siteID` from `sites` where `foo` = "bar")
order by `timestamp` desc limit 100
...retourne une erreur:
Unknown column 'sID' in 'IN/ALL/ANY subquery'
Je ne comprends pas ce que je fais mal ici. Le sID
chose n'est pas censé être une colonne, mais le "alias" (qu'est-ce que cela s'appelle?) J'ai créé par l'exécution de (select siteID from users where userID = uID) as sID
. Et il n'est même pas à l'intérieur de la IN
sous-requête.
Des idées?
Edit: @Roland: Merci pour votre commentaire. J'ai trois tables, actions
, users
et sites
. Le tableau actions
contient un userID
champ, ce qui correspond à une entrée dans le users
table. Chaque utilisateur de ce tableau (users
) a un siteID
.
Je suis en train de sélectionner les récentes actions de la actions
table, et le lien à la users
et sites
de table pour savoir qui a effectué ces actions, et sur quel site. L'espoir qui fait sens 🙂
OriginalL'auteur Mathias Bynens | 2009-12-30
Vous devez vous connecter pour publier un commentaire.
Soit vous vous placez dans une sous-requête:
ou, mieux, de le réécrire comme une
JOIN
Créer les index suivants:
+1 pour l'ajout de l'index. Grand réponse!
OriginalL'auteur Quassnoi
L'alias de colonne n'est pas établie jusqu'à ce que le processeur de requêtes finitions de la clause Select, et buiulds le premier résultat intermédiaire, de sorte qu'il ne peut être référencé dans un groupe, (puisque la clause group By fonctionne sur ce résultat intermédiaire set) si vous voulez ot utiliser de cette façon, puit de l'alias à l'intérieur de la sous-requête, alors il sera dans le jeu de résultats générés par la sous-requête, et donc accessible à la requête externe. Pour illustrer
(Ce n'est pas la façon la plus simple de faire cette requête, mais il illustre la façon d'établir et d'utiliser un alias de colonne à partir d'une sous-requête)
OriginalL'auteur Charles Bretana
Essayez ce qui suit:
@Roland Bouman
: cette requête est correcte, je ne vois aucune raison de downvote.La réponse n'exclut pas de revenir un scalaire dans une sous-requête dans la liste de sélection - unis vous ne pouvez pas retourner un set. Je devrais avoir évoqué le message d'erreur.
@mikecsh
: Un champ appeléuserID
dans une table appeléeusers
a tendance à être unPRIMARY KEY
, de sorte que la sous-requête ne sera pas en mesure de retourner plus d'un enregistrement. Votre requête est correcte mais la déclaration sur les sous-requêtes et les jeux de confusion. Je venais de le supprimer si j'étais vous 🙂fait, merci.
OriginalL'auteur mikecsh
Je pense que la raison de l'erreur est que l'alias n'est pas disponible à l'instruction, qui est pourquoi nous devons AVOIR.
Mais je suis également d'accord avec les autres réponses que votre requête pourrait être mieux structuré.
OriginalL'auteur Question Mark
Essayez ce qui suit
Si vous souhaitez utiliser un champ à partir de la section sélection plus tard vous pouvez essayer une sous-sélection
OriginalL'auteur Adriaan Stander