65 votes

Sélectionner le nombre de lignes d'une autre table dans une instruction SELECT Postgres

Je ne sais pas comment formuler cette demande, alors aidez-moi aussi pour le titre :)

J'ai deux tables. Appelons-les A y B . El B La table a un a_id clé étrangère qui pointe vers A.id . Maintenant, je voudrais écrire un SELECT qui récupère tous les A avec une colonne supplémentaire contenant le nombre de B enregistrements par A pour chaque ligne du jeu de résultats.

J'utilise Postgresql 9 pour l'instant, mais je suppose qu'il s'agit d'une question SQL générique ?

EDITAR:

Finalement, j'ai opté pour la solution trigger-cache, où A.b_count est mis à jour par une fonction à chaque fois que B changements.

0voto

Gryzor Points 1

Si une sous-requête peut être moins efficace, le degré de perte d'efficacité dépend du cas d'utilisation. Il faut également tenir compte des filtres utilisés.

J'ai un tableau A d'"approbateurs". J'ai un tableau B de "tâches d'approbation".

Je souhaite afficher une liste de TOUS les approbateurs ainsi que le nombre de tâches d'approbation ACTIVES dont ils disposent. Mes connaissances en SQL sont limitées, mais peu importe ce que j'ai essayé avec les différents types de jointures, ma liste d'approbateurs était incomplète. Pourquoi ? J'ai besoin d'un filtre sur la table B pour que seules les tâches actives soient affichées. Si un approbateur n'a que des tâches inactives/complètes, il n'y a pas de compte. Cela devrait indiquer 0, mais pour une raison quelconque, la ligne n'apparaît pas du tout.

J'utilise donc une sous-requête et cela fonctionne parfaitement.

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