2017-09-06 3 views
2

J'ai un problème avec la prochaine requête SQL (générée par sequelize ORM):colonne n'existe pas dans la jointure externe après alias

SELECT 
    "Publication".*, 
    "user"."id" AS "user.id" 
FROM 
    (SELECT "Publication"."club_id" AS "clubId", "Publication"."user_id" AS "userId" FROM "publication" AS "Publication" WHERE ("Publication"."club_id" = '1')) AS "Publication" 
    LEFT OUTER JOIN "user_account" AS "user" ON "Publication"."user_id" = "user"."id"; 

L'erreur résultant est:

ERROR: column Publication.user_id does not exist

LINE 6: LEFT OUTER JOIN "user_account" AS "user" ON "Publication"."... ^

Mon intuition ce qui se passe est que "Publication"."user_id" est en cours d'alias comme userId. Ensuite, la requête est en cours d'alias comme "Publication" (en écrasant l'étiquette qui se référait précédemment à la table). La jointure externe gauche essaie de faire correspondre la nouvelle propriété Publicationuser_id avec user.id, mais elle est impossible car elle s'appelle désormais userId. Est-ce que je comprends correctement le problème?

Répondre

3

ERROR: column Publication.user_id does not exist

réponse est simple user_id <>userId:

SELECT "Publication".*, 
     "user"."id" AS "user.id" 
FROM 
    (SELECT "Publication"."club_id" AS "clubId" 
      ,"Publication"."user_id" AS "userId" 
     FROM "publication" AS "Publication" 
    WHERE "Publication"."club_id" = '1') AS "Publication" 
LEFT JOIN "user_account" AS "user" 
    ON "Publication"."userId" = "user"."id"; 
        -- here use column's alias 
+1

Merci, lad2025. Je cherchais à vérifier ma compréhension plus que réparer le problème. J'ai aussi fait le changement que vous avez proposé, mais je voulais être sûr des raisons. –