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