Tach!
GROUP_CONCAT() liefert einen String zurück. Der wird komplett als ein Parameter von IN() angesehen. Du willst jedoch, dass er als kommaseparierte Liste angesehen wird.
Verständnisfrage: Wenn ich den Query händisch zusammenflicke, ist der betreffende Teil doch auch nur ein String. Was ist hier anders?
Das SQL-Statement wird geparst. Dann wird das Parse-Ergebnis ausgeführt. Der Parser hat nun fertig und dein Kommas enthaltender String, der erst während der Verarbeitung anfällt, bleibt wie er ist. MySQL kann ja auch nicht hellsehen, wann der Autor ein Parsen wünscht und wann das Ergebnis einer Funktion wie es ist weiterverarbeitet werden soll. So bleibt's bei letzterem.
Mit der normalen Ergebnismenge bin ich ebenfalls gescheitert, da dann (völlig zu recht) angemeckert wird, dass der Subquery mehr als ein Ergebnis zurückgegeben hat (
Subquery returns more than 1 row
).
Ja, weil das IF() nur einen Parameter und keine Ergebnismenge haben will. IN(SELECT ...) ginge.
dedlfix.