Stefan: Query gesucht

Beitrag lesen

Tach!

N'abend.

Danke für die lange Erklärung, auch wenn ich nicht alles sofort durchschaue.

Nehmen wir erstmal das WHERE:

( (SELECT COUNT(*) FROM spiele) = (SELECT spieler_id COUNT(*) FROM m_n_tabelle GROUP BY spieler_id) )

Links gibt es genau ein Ergebnis, rechts gibt es je eines Pro Spieler, also eine Ergebnismenge > 1 (wenn man sich mal das spieler_id vor dem COUNT(*) wegdenkt). Eins mit mehreren zu vergleichen ist nicht besonders sinnvoll.

Ja, das stimmt.

Aber warum tuts dann das hier nicht?

SELECT Name FROM spieler
WHERE SID =
( (SELECT COUNT(*) FROM m_n_tabelle) = (SELECT COUNT(*) AS Anzahl FROM spiele GROUP BY SID ORDER BY Anzahl DESC LIMIT 1) )

Da wäre also die eine Lösungsmöglichkeit:

SELECT Name FROM spieler s
WHERE (SELECT COUNT(*) FROM spiele) = (SELECT COUNT(*) FROM m_n_tabelle m WHERE s.SID = m.spieler_id)

Da kommt das gesuchte Ergebnis raus. Nicht schlecht...

Und nun noch die zweite:

SELECT spieler.SID, COUNT(*) anzahl FROM spieler
LEFT JOIN m_n_tabelle ON spieler.SID = m_n_tabelle.SID
-- bei Bedarf noch WHERE auf irgendwelche anderen Bedingungen
GROUP BY spieler.SID
HAVING (SELECT COUNT(*) FROM spiele) = anzahl

Passt ebenso!

Hut ab und Dank, dedlfix. Ich fand (und finde) das nicht wirklich einfach.

Kannst Du mir noch sagen, warum mein obiges Beispiel nicht funktioniert?

Stefan