• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

COUNT(*) INNER JOIN

scbawik

Senior HTML'ler
Hallo!

Ich habe folgende Query:

Code:
SELECT
    a.*
FROM
    Adressen a
INNER JOIN
    Personen p ON (a.id = p.Adresse)
GROUP BY
    a.id

Das gibt mir alle Einträge aus, bei denen zumindest einmal a.id GLEICH p.Adresse ist. Da es aber viel zu viele Einträge sind, möchte ich sie vorher zählen:

Code:
SELECT
    COUNT(a.id) as num_rows
FROM
    Adressen a
INNER JOIN
    Personen p ON (a.id = p.Adresse)
GROUP BY
    a.id

Erhoffen würde ich mir nur 1 Zeile mit nur 1 Spalte namens num_rows mit der Anzahl der passenden Adressen.
Stattdessen erhalte ich aber mehrere Rows (pro passende Adresse eine - also gleiche Anzahl an Rows wie bei der oberen Abfrage), in welcher jeweils die gezählten passenden Personen enthalten sind. Wenn eine Adresse also 6 Personen zugewiesen ist, steht in "num_rows" 6.

Wie muss ich die Abfrage ändern damit ich wie oben erwähnt nur eine Zeile erhalte?

Ich danke schonmal im Voraus und bedanke mich auch !
 
Habe jetzt eine Lösung mit einem Verschachtelten SELECT, allerdings hasse ich verschachtelte Queries, wer also eine andere Lösung hätte - nur her damit :P
 
nur 1 Zeile mit nur 1 Spalte namens num_rows mit der Anzahl der passenden Adressen.

Wie wäre es, wenn die id der suchenden Adresse in einer WHERE-Clausel angibst!?
Code:
SELECT
    COUNT(a.id) as num_rows
FROM
    Adressen a
INNER JOIN
    Personen p ON (a.id = p.Adresse)
WHERE  a.id = die zu_suchende_id

Hiermit
Code:
SELECT
    a.id, COUNT(a.id) as num_rows
FROM
    Adressen a
INNER JOIN
    Personen p ON (a.id = p.Adresse)
GROUP BY
    a.id
bekommst du eine 2-Spaltige und mehrzeile Ausgabe ALLER id's in Adressen a, die von Personen p benutzt werden; aber DAS willst Du ja so nicht wissen laut Deiner Fragestellung.
 
Zurück
Oben