Hilfe bei SQL Inner Join bzw group by
Hallo ich brauche mal eure Hilfe da meine SQL Zeit doch sehr lange her ist. Ich glaube ich brauche Inner Join und Group by
Ich habe eine Tabelle in der stehen verschiedene Wert. Eine Spalte mit einem Bildpfad welcher öfters vorkommt. Eine Spalte mit einem Variablen Namen welcher auch öfters vorkommt aber immer nur 1x zu jedem Bildpfad und eine Lösungsspalte. Jetzt kann ich mit select bild, Lösung from tabelle where bild like '%xx1%' and variable 'xx1' mir zwar immer das Ergebnis für eine bestimmte Variable anzeigen lassen aber ich möchte das vereinfachen in dem ich mir zu dem Bild zum Beispiel variable xx1 bis xx5 anzeigen lasse bzw reichen mir die Lösungen.
Ich habe eine Tabelle in der stehen verschiedene Wert. Eine Spalte mit einem Bildpfad welcher öfters vorkommt. Eine Spalte mit einem Variablen Namen welcher auch öfters vorkommt aber immer nur 1x zu jedem Bildpfad und eine Lösungsspalte. Jetzt kann ich mit select bild, Lösung from tabelle where bild like '%xx1%' and variable 'xx1' mir zwar immer das Ergebnis für eine bestimmte Variable anzeigen lassen aber ich möchte das vereinfachen in dem ich mir zu dem Bild zum Beispiel variable xx1 bis xx5 anzeigen lasse bzw reichen mir die Lösungen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 472549
Url: https://administrator.de/forum/hilfe-bei-sql-inner-join-bzw-group-by-472549.html
Ausgedruckt am: 22.12.2024 um 13:12 Uhr
12 Kommentare
Neuester Kommentar
Nach drei mal lesen checke ichs noch nicht. Also 3 Spalten: Bildpfad, Variabler_Name und Bild, was genau verstehst du unter einer "Lösungsspalte"? Willst du etwas aggregieren? Wiso suchst du mit WHERE nach Bild und gruppierst nicht nach Bildpfad?
SELECT bildpfad, variabler_name, bild, aggregat
FROM tabelle
GROUP BY bildpfad, variabler_name, bild
Einen INNER JOIN brauchst du frühestens wenn du mehr als eine Tabelle hast, davon steht da aber nix.
SELECT bildpfad, variabler_name, bild, aggregat
FROM tabelle
GROUP BY bildpfad, variabler_name, bild
Einen INNER JOIN brauchst du frühestens wenn du mehr als eine Tabelle hast, davon steht da aber nix.
Moin,
dann wäre es mit einem Join doch möglich.
Ich gehe mal davon aus, dass das Bild der "Schlüssel" ist, dann kannst du die Tabelle mit sich selbst joinen:
Hinweis zum Full Outer Join:
https://www.w3schools.com/sql/sql_join_full.asp
Gruß
em-pie
dann wäre es mit einem Join doch möglich.
Ich gehe mal davon aus, dass das Bild der "Schlüssel" ist, dann kannst du die Tabelle mit sich selbst joinen:
Select
a.Bild
, a.item_id as L1
, b.item_id as L2
From
YourTable as a
Full Outer Join
YourTable as b on a.Bild = b.Bild
where
Bild like '%211%'
Hinweis zum Full Outer Join:
https://www.w3schools.com/sql/sql_join_full.asp
Gruß
em-pie
Bild ist in jedem Fall die Spalte anhand derer du das ganze zusammen fassen willst. Ich vermute das kommt aber erst durch ein schlechtes Design zustande, also eigentlich ist warscheinlich item_id mehrteilig, ein Teil haben alle Bilder gemeinsam und ein Teil identifiziert die verschiedenen Einträge mit dem selben Bild. In deinem Beispiel wäre das VL03102 als gemeinsammer Nenner und a,b als "VersionsID" des Bildes.
Wenn dem so ist und diese Struktur immer feste Gemeinsamkeiten hat dann könnte man diese Spalte zerlegen und den ersten Teil als Gemeinsamkeit nehmen. Dazu kennen wir die Entstehung der Werte in dieser Spalte aber nicht ausreichend, wird da immer genau maximal ein Buchstabe angehängt und gibt es auch Einträge ohne Buchstaben?
In jedem Fall ließe sich anhand dieser Spalte oder ersatzweise Bild gruppieren oder Joinen. Ich vermute immernoch du willst gruppieren aber dazu müssen wir deine Spalte Lösung und ihre Bedeutung verstehen. Ist das eine Zeichenkette oder ließe sich das anders irgendwie zusammen fassen? Was ist dein Wunschergebnis zu den oben gezeigten Datensätzen?
Und bitte immer Fehlermeldungen posten Um welches SQL handelt es sich?
Wenn dem so ist und diese Struktur immer feste Gemeinsamkeiten hat dann könnte man diese Spalte zerlegen und den ersten Teil als Gemeinsamkeit nehmen. Dazu kennen wir die Entstehung der Werte in dieser Spalte aber nicht ausreichend, wird da immer genau maximal ein Buchstabe angehängt und gibt es auch Einträge ohne Buchstaben?
In jedem Fall ließe sich anhand dieser Spalte oder ersatzweise Bild gruppieren oder Joinen. Ich vermute immernoch du willst gruppieren aber dazu müssen wir deine Spalte Lösung und ihre Bedeutung verstehen. Ist das eine Zeichenkette oder ließe sich das anders irgendwie zusammen fassen? Was ist dein Wunschergebnis zu den oben gezeigten Datensätzen?
Und bitte immer Fehlermeldungen posten Um welches SQL handelt es sich?
Tja,
Das Full Outer Join kann MySQL nicht. Bin von MS SQL ausgegangen.
Aber der Fehler sagt es dir doch: „in der Nähe von Full Outer Join gibt es einen Fehler“
Schaue einmal hier
https://www.peterkropff.de/site/mysql/full_outer_join.htm
Gruß
em-pie
Das Full Outer Join kann MySQL nicht. Bin von MS SQL ausgegangen.
Aber der Fehler sagt es dir doch: „in der Nähe von Full Outer Join gibt es einen Fehler“
Schaue einmal hier
https://www.peterkropff.de/site/mysql/full_outer_join.htm
Gruß
em-pie
Moin @HeadoN .
Hier mal schnell durchgespielt:
Exemplarische Tabelle :
Dann folgendes SQL in MySQL Workbench ausgeführt:
Und folgendes Ergebnis erhalten:
Dabei ist es egal wie viele item_id's zum entsprechenden Bild existieren, diese werden ermittelt und die entsprechenden Spalten generiert.
Lesenswert dazu :Dynamic pivot tables (transform rows to columns)
Ciao.
Gruß
Hier mal schnell durchgespielt:
Exemplarische Tabelle :
Dann folgendes SQL in MySQL Workbench ausgeführt:
SET @sql = NULL;
set @filter = '%0122%';
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(item_id = ''',
item_id,
''', lösung, NULL)) AS ''Lösung(',
item_id,
')'''
)
) INTO @sql
FROM daten
WHERE bild like @filter;
SET @sql = CONCAT('SELECT bild, ', @sql, ' FROM daten WHERE bild like ''',@filter,''' GROUP BY bild');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Dabei ist es egal wie viele item_id's zum entsprechenden Bild existieren, diese werden ermittelt und die entsprechenden Spalten generiert.
Lesenswert dazu :Dynamic pivot tables (transform rows to columns)
Ciao.
Gruß
Bitte.