2010-07-28 8 views
0

son été depuis que j'ai utilisé des sous-requêtes corelated, je ne suis pas sûr si je fais cela correctement. dans ma sous-requête 2ème ligne, j'essaie d'obtenir node.id de la table externe. lorsque je tente d'exécuter la requête, je reçoisSous-requêtes corrélées par MySQL: La sous-requête ne peut pas trouver la table de la requête externe?

Code d'erreur: 1054 Unknown column 'node.id' dans 'where')

select node.id, node.title, depthLookup.depth 
from posts node, (
    select count(parent.title) as depth 
    from posts parent, posts children 
    where children.lft > parent.lft 
    and children.rgt < parent.rgt 
    and children.id = node.id 
    order by parent.lft 
) as depthLookup; 

Répondre

2

Il semble que vous avez juste besoin de déplacer votre expression de la clause 'de' la liste des champs

select node.id, node.title, 
(
    select count(parent.title) as depth 
    from posts parent, posts children 
    where children.lft > parent.lft 
    and children.rgt < parent.rgt 
    and children.id = node.id 
    order by parent.lft 
) as depthLookup 
from posts node; 

Ou utilisez table comme valeur unique:

select node.id, node.title, depthLookup.depth 
from posts node, 
(
    select count(parent.title) as depth 
    from posts parent, posts children 
    where children.lft > parent.lft 
    and children.rgt < parent.rgt 
    and children.id = node.id 
    order by parent.lft 
) as depthLookup; 
+0

déplacer la sous-requête à la liste des champs fonctionne. Votre table à valeur unique n'est-elle pas la même que la mienne? –

+0

Exactement pareil! Je n'ai pas saisi votre idée, initialement – burnall

+0

aucune idée pourquoi j'ai besoin de déplacer la sous-requête à la liste des champs? Je ne peux pas utiliser à partir de sous-requêtes –

Questions connexes