ERREUR: invalid référence à la clause from
J'ai le SQL (PostgreSQL) requête:
SELECT ff.*, fp.*
FROM fibra ff, fibra fp
JOIN cables cp ON fp.cable_id = cp.id
LEFT OUTER JOIN terceiro ced_pai ON ced_pai.id = cp.cedente_id
LEFT OUTER JOIN terceiro tp ON tp.id = fp.terceiro_id
JOIN cables cf ON ff.cable_id = cf.id
LEFT OUTER JOIN terceiro ced_f ON ced_f.id = cf.cedente_id
LEFT OUTER JOIN terceiro tf ON tf.id = ff.terceiro_id
where ff.fibra_pai_id = fp.id
AND ff.cable_id IN (8,9,10)
AND fp.cable_id IN (8,9,10)
Mais ça me donne cette erreur:
ERROR: invalid reference to FROM-clause entry for table "ff"
LINE 8: JOIN cables cf ON ff.cable_id = cf.id
^
HINT: There is an entry for table "ff", but it cannot be referenced from this part of the query.
********** Error **********
ERROR: invalid reference to FROM-clause entry for table "ff"
SQL state: 42P01
Hint: There is an entry for table "ff", but it cannot be referenced from this part of the query.
Character: 261
Personne ne sait ce que je fais mal ?
double possible de Quel est le problème avec cette requête?
Aussi cette question est la même: stackoverflow.com/questions/187146/...
Aussi cette question est la même: stackoverflow.com/questions/187146/...
OriginalL'auteur lcguida | 2012-11-08
Vous devez vous connecter pour publier un commentaire.
On mélange les implicites et explicites des Jointures. C'est généralement difficile à lire, et conduit à l'inattendu, de l'ordre de problèmes liés à l'évaluation, comme vous venez de découvrir.
Vous devriez toujours utiliser
JOIN ... ON
syntaxe partout; éviter l'héritageFROM table1, table2
. Si vous corrigez votre requête à utiliser explicite JOINDRE au lieu deFROM fibra ff, fibra fp
, par exemple,FROM fibra ff INNER JOIN fibra fp ON (ff.fibra_pai_id = fp.id)
et omettreff.fibra_pai_id = fp.id
de laWHERE
clause, vous devriez obtenir le résultat attendu.Le voir, cette question qui A. H. liés à:
Le mélange explicites et implicites rejoint échoue avec "Il y a une entrée pour la table ... mais il ne peut pas être référencé à partir de cette partie de la requête"
héritage
FROM
? Vraiment? Il est utilisé pour calculer le Produit Cartésien et vous avez besoin encore d'utiliserINNER JOIN
, n'est-ce pas? postgresql.org/docs/9.3/static/sql-select.html#SQL-FROMest pas, bien sûr, "l'héritage" dans tous les sens. Le non-ansi syntaxe de jointure
FROM table1, table2 WHERE tablea.id = tableb.id
est généralement considéré comme si, à la norme ANSI jointures internes favorisé la place. Si vous voulez pas filtré produit cartésien vous pouvez utilisertablea CROSS JOIN tableb
, ce qui rend vos intentions explicites.OriginalL'auteur
Convertir toutes les jointures dans votre requête pour être explicite afin d'éviter le problème que vous rencontrez, ne pas laisser de l'implicite et d'autres explicite.
Cela devrait fonctionner:
OriginalL'auteur