Requête SQL, compte avec 0 nombre
J'ai trois tables: page, pièce jointe, page-attachement
J'ai des données comme ceci:
page
ID NAME
1 first page
2 second page
3 third page
4 fourth page
attachment
ID NAME
1 foo.word
2 test.xsl
3 mm.ppt
page-attachment
ID PAGE-ID ATTACHMENT-ID
1 2 1
2 2 2
3 3 3
Je voudrais obtenir le nombre de pièces jointes par page également lorsque ce nombre est 0. J'ai essayé avec:
select page.name, count(page-attachment.id) as attachmentsnumber
from page
inner join page-attachment on page.id=page-id
group by page.id
J'obtiens ce résultat:
NAME ATTACHMENTSNUMBER
second page 2
third page 1
Je voudrais obtenir ce résultat:
NAME ATTACHMENTSNUMBER
first page 0
second page 2
third page 1
fourth page 0
Comment puis-je obtenir le 0?
source d'informationauteur Sergio del Amo | 2008-08-31
Vous devez vous connecter pour publier un commentaire.
Changer votre "inner join" pour une "jointure externe gauche", qui signifie "donnez-moi toutes les lignes sur la gauche de la rejoindre, même si il n'y a pas de ligne correspondante sur la droite."
Voici une autre solution à l'aide de sous-requêtes.
Selon la base de données, pour la vitesse, vous pouvez utiliser la commande UNION.
Le SQL est plus long, mais, selon la base de données, il accélère les choses séparant "compter les choses qui sont là-bas" et "nombre de choses qui ne sont pas là".
La base de données j'ai besoin de cette solution a 20 pages de plus d'un million de pièces jointes. L'UNION fait exécuter en 13 secondes, plutôt que de si longtemps j'en ai eu marre et a essayé d'une autre façon (quelque part au-dessus de 60 secondes avant de j'ai tué la jointure externe et sous-requête des méthodes).
Vous voulez une jointure gauche, au lieu d'une jointure interne, qui permet l'enregistrement n'existe pas.
LEFT join est votre ami.
Pour en savoir plus sur les différents types de jointure reportez-vous à http://en.wikipedia.org/wiki/Join_(SQL)
Utiliser ceci: