MySQL: group_concat in where-teil
Tobias Wust
- datenbank
Hallo hallo,
ich komme mit folgendem Problem leider nicht weiter:
SELECT group_concat( nem.EM
SEPARATOR ', ' ) AS 'all.EM', neinsaetze.EINSATZNUMMER
FROM neinsaetze
JOIN nem ON neinsaetze.einsatznummer = nem.einsatznummer
GROUP BY neinsaetze.einsatznummer
ergibt:
all.EM EINSATZNUMMER
99-11, 12-42, 10-30, 10-13, 10-10 1100000136
99-11, 10-30, 10-5, 10-13, 12-42, 10-10, 12-42 1100000137
Ich würde gerne soetwas machen wie
WHERE all.EM LIKE %10-5% um die zweite Zeile zu finden.
Weiß jemand eine Lösung oder eine Alternative?
Hallo,
SELECT group_concat( nem.EM
SEPARATOR ', ' ) AS 'all.EM', neinsaetze.EINSATZNUMMER
FROM neinsaetze
JOIN nem ON neinsaetze.einsatznummer = nem.einsatznummer
GROUP BY neinsaetze.einsatznummer
ergibt:
all.EM EINSATZNUMMER
99-11, 12-42, 10-30, 10-13, 10-10 1100000136
99-11, 10-30, 10-5, 10-13, 12-42, 10-10, 12-42 1100000137
Ich würde gerne soetwas machen wie
WHERE all.EM LIKE %10-5% um die zweite Zeile zu finden.
Weiß jemand eine Lösung oder eine Alternative?
a) die HAVING-Klausel nutzen:
HAVING all.EM LIKE '%10-5%'
b) die relevante Einsatznummer(n) über ein Subselect herausfinden:
WHERE
einsatznummer IN (
SELECT
nem2.einsatzunummer
FROM
nem nem2
WHERE
nem2.EM = '10-5'
)
Es ist Deine Aufgabe herauszufinden, welche der beiden bei Deinen Daten performanter ist. Vermutlich ist es die Lösung mit dem Subselect, weil sie von vornherein viele Datensätze ausfilter. Bei HAVING wird zunächst die gesamte Lösungsmenge ermittelt und erst zum Schluss das ausgefiltert, was Du benötigst.
Freundliche Grüße
Vinzenz
Wo dieses nem2 aus dem nichts herkommt verstehe ich nicht, aber die Lösung funktioniert wunderbar.
Vielen Dank dafür!
Hallo Tobias,
Wo dieses nem2 aus dem nichts herkommt verstehe ich nicht,
wie sag' ich so gern: Code ohne Kommentare ist schlechter Code:
WHERE
einsatznummer IN (
SELECT
nem2.einsatzunummer
FROM
nem nem2 -- Aliasname für die Tabelle nem.
-- Bei mehrfachem Zugriff auf die gleiche
-- Tabelle nötig, damit das DBMS die Zugriffe
-- unterscheiden kann.
WHERE
nem2.EM = '10-5'
)
aber die Lösung funktioniert wunderbar.
Vielen Dank dafür!
Schön zu hören. Wir helfen gerne. Echte Hilfe versetzt denjenigen, dem geholfen werden soll, in die Lage, die Lösung zu verstehen und auf vergleichbare Problemstellungen anwenden zu können. Ich hoffe, Du hast die wesentlichen Unterschiede zwischen den beiden von mir vorgeschlagenen Lösungsansätzen verstanden. Ich hoffe, Du hast verstanden, warum beide Vorschläge zu dem von Dir gewünschten Ergebnis führen.
Freundliche Grüße
Vinzenz