mit dem folgenden Schema http://sqlfiddle.com/#!9/dbc328 Ich habe zwei Tabellen:MySQL - zählen Elemente in einem anderen Tabelleneinträge mit (INNER JOIN)
Namen
id
name
und
Adressen
id
nameId
address
Ich muss herausfinden, wie viele Ressourcen in names
eine bestimmte Anzahl von Adressen haben, zum Beispiel 3 Adressen.
Verwenden Sie die folgende Abfrage:
SELECT n.id
FROM `names` n
INNER JOIN `addresses` a on a.nameId = n.id
group by n.id
having count(a.id) = 3
ich herausfinden kann, welche diese Namen sind, aber ich brauche eine count()
.
Wenn Zählung zu verwenden versuchen, wie
SELECT count(n.id) as cnt
FROM `names` n
INNER JOIN `addresses` a on a.nameId = n.id
group by n.id
having count(a.id) = 3
funktioniert nicht, weil ich group by
bin mit. Ich weiß, dass ich das erreichen konnte, indem ich verschachtelte Abfragen verwendete, aber ich möchte wissen, ob es unter Verwendung einer einzelnen Abfrage durchgeführt werden kann.
EDIT: Die erwartete Antwort sollte eine einzelne Zeile sein, die ein einzelnes Feld 'cnt' enthält, die die Anzahl der Namen mit jeweils 3 Adressen zurückgeben sollte.
z.B. die Antwort 2
in diesem Fall sein sollte, da die einzigen Einträge, die unsere Kriterien entsprechen sind 1
und 4
EDIT: Hier ist die verschachtelte Abfrage, die auf
select count(n.id) as cnt
from `names` n
where n.id IN (SELECT n.id
FROM `names` n
INNER JOIN `addresses` a on a.nameId = n.id
group by n.id
having count(a.id) = 3)
ich erreichen möchte die gleiche Sache funktioniert OHNE mit verwenden Sie eine verschachtelte Abfrage
Danke, Daniel
, was Ihre erwartete Ausgabe als pe r Ihre gegebene Tabelle? – Sadikhasan
Die erwartete Antwort sollte eine einzelne Zeile sein, die ein einzelnes Feld 'cnt' enthält, das die Anzahl der Einträge in der Tabelle 'names' mit jeweils 3 Adressen zurückgeben sollte. – Daniel
Sie müssen Ihre Abfrage als Unterabfrage verwenden und in der äußeren Abfrage "count" anwenden. –