Tach!
Ich weiß, die Funktion [sprintf] hat aber auch ihre Grenzen, gerade in Hinsicht auf die Übersichtlichkeit (Beispiel: ein Präfix vor Tabellen) finde ich es manchmal besser, eben doch die Stringbildung zu unterbrechen, vielleicht empfinden das andere ja auch anders.
Wo ist denn beim Präfix die Grenze? Zur Not gibt es %1$s, was man wiederholt verwendet und den Wert nur einmal als Parameter hat. Abgesehen davon, gibt es vielleicht bessere Lösungen, wie Suchen und Ersetzen einer markanten Zeichenfolge (bevor die Werte eingefügt werden, in denen kollidierende Zeichenfolgen enthalten sein können).
Eine andere Lösung als in() + having count() kennst Du ebenfalls bei der Problemstellung nicht?
Du willst das ja auch noch flexibel haben, also egal wieviele Werte. Eine Lösung, bei der pro Wert ein großer Codezuwachs entsteht, ist also nicht optimal. Die HAVING-COUNT-Lösung ist da schon die beste, die mir einfällt.
Es geht aber noch komplizierter:
SELECT a FROM tabelle WHERE b in (werte) GROUP BY a HAVING GROUP_CONCAT(b ORDER BY b) = 'werte_als_kommaseparierter_string'
Das ist aber nicht schön, weil für jede Gruppe das GROUP_CONCAT berechnet werden muss, anstatt nur die Anzahl der Gruppenwerte zu vergleichen.
Das Problem ist, dass deine dich interessierenden Werte nicht "nebeneinander" sondern "untereinander" stehen und erst zusammengefasst werden müssen, bevor du sie auswerten kannst. SQL ist dafür nicht ausgelegt, in Abhängigkeit von anderen Datensätzen derselben Tabelle zu agieren. Da müssen dann solche Hilfsmittel wie Gruppierungen oder Selfjoins herhalten.
dedlfix.