j'ai deux requêtes pour compter les données:Deux requêtes de sélection avec un nombre à une requête
SELECT x.Id, COUNT(DISTINCT y.Id)
FROM X x
INNER JOIN Y y ON x.Id = y.otherId
SELECT x.Id, COUNT(DISTINCT z.Id)
FROM X x
INNER JOIN Z z ON x.Id = z.otherId
Les deux requêtes renvoient la juste valeur lors de l'exécution séparée.
Mais je voudrais combiner ces requêtes à une seule requête:
SELECT x.Id, COUNT(DISTINCT y.Id), COUNT(DISTINCT z.Id)
FROM X x
INNER JOIN Y y ON x.Id = y.otherId
INNER JOIN Z z ON x.Id = z.otherId
Quand je fais cela, les deux chefs d'accusation sont faux par rapport aux requêtes exécutées séparément. Pourquoi est-ce que cela se produit, je suis vraiment confus. La solution pourrait être simple, mais je n'ai vraiment aucune idée pour le moment.
Bonjour, pourquoi la jointure interne filtre-t-elle les valeurs qui ne correspondent pas dans les deux tables? Par exemple j'utilise x.Id = y.otherId, cela devrait obtenir les valeurs correspondantes, n'est-ce pas? – Swag
@ y451n. . . Certains 'x.id' ont des correspondances dans la table' y'; certains ont des correspondances dans la table 'z'. Certains dans les deux, mais certains seulement dans un. Avec la jointure interne, vous obtenez uniquement les correspondances dans les deux tables. –