130 votes

Comment faire une sous-requête Postgresql dans la clause select avec la jointure à partir de la clause comme SQL Server?

J’essaie d’écrire la requête suivante sur postgresql :

Cela fonctionnerait certainement sur Microsoft SQL Server mais pas du tout sur postegresql. J’ai lu un peu sa documentation et il semble que je pourrais la réécrire comme suit :

Mais cela renvoie l’erreur suivante sur postegresql : « la sous-requête dans FROM ne peut pas faire référence à d’autres relations de même niveau de requête ». Je suis donc coincé. Quelqu’un sait-il comment je peux y parvenir?

Merci

178voto

Bob Jarvis Points 14906

Je ne suis pas sûr de comprendre parfaitement votre intention, mais peut-être que ce qui suit serait proche de ce que vous voulez:

Malheureusement, cela ajoute l’exigence de regrouper la première sous-requête par id ainsi que par nom et author_id, ce qui, à mon avis, n’était pas souhaité. Je ne sais pas comment contourner cela, cependant, car vous devez avoir un identifiant disponible pour rejoindre la deuxième sous-requête. Peut-être que quelqu’un d’autre trouvera une meilleure solution.

28voto

dmikam Points 89

Je sais que c’est vieux, mais depuis Postgresql 9.3 , il y a une option pour utiliser un mot-clé « LATERAL » pour utiliser des sous-requêtes RELATED à l’intérieur de JOINS, de sorte que la requête de la question ressemblerait à:

17voto

Ricardo Points 1188

Je réponds juste ici avec la version formatée du sql final dont j’avais besoin basé sur la réponse de Bob Jarvis comme posté dans mon commentaire ci-dessus:

4voto

Zahid Gani Points 53
<pre><code></code><p><code></code> si plus de jointure interne, car plus de performances de groupe de jointure sont lentes</p></pre>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X