maffi
Goto Top

SQL Abfrage über 4 Tabellen

Hallo Zusammen

Ich versuche eine Abfrage über 4 Tabellen zu schreiben, soweit bekomme ich auch alle Daten die ich brauche, allerdings gibt er mir nur den letzten Kundennamen aus der Tabelle vorgänge.Kunde aus und das für alle Ergebnisse, wäre eine Abfrage mit JOIN sinnvoller? Wie würde so eine Abfrage mit JOIN aussehen?

SELECT
    container.ContainerNR AS ContainerID,
    geraete.IMEI,
    container.ConfID,
    container.ArtID AS Art,
    vorgaenge.status,
    geraete.LetzteStandort,
    kunde.Name as Name,
    kunde.Kundennummer,
    vorgaenge.aufstellenAm,
    vorgaenge.abholenAm
FROM
    vorgaenge,
    container,
    kunde,
    geraete
WHERE
    container.ContainerNR>0 AND
    container.ContainerNR = geraete.ContainerID AND kunde.Kundennummer = vorgaenge.kundennummer  AND SUBSTRING_INDEX(vorgaenge.containerID, ' ', 1)   
IN( SELECT container.ContainerNR FROM container) AND SUBSTRING_INDEX(vorgaenge.containerID, ' ', -1) IN( SELECT container.ContainerNR FROM container)  
GROUP BY
geraete.IMEI,
    ContainerID;
screen

Content-ID: 382116

Url: https://administrator.de/forum/sql-abfrage-ueber-4-tabellen-382116.html

Ausgedruckt am: 23.12.2024 um 04:12 Uhr

MttKrb
Lösung MttKrb 03.08.2018 aktualisiert um 08:50:25 Uhr
Goto Top
Hi,
ein Join funktioniert prinzipiell so:
Select * from vorgaenge 
join kunde on kunde.kundennummer=vorgaenge.Kundennummer
willst du mehr Tabellen verknüpft haben so setze einfach ein weiteres Join darunter.
Ggf. danach noch wenn nötig Where, Order by, Group by.
Versuche mal die Groß- und Kleinschreibung einheitlich zu machen.
Eine Übersicht über verschiedene Arten von Joins findest du hier: http://www.datenbanken-verstehen.de/sql-tutorial/sql-joins/

Viele Grüße
ukulele-7
Lösung ukulele-7 06.08.2018 um 13:00:49 Uhr
Goto Top
Wie schon gesagt ja, bitte explizite Join-Syntax verwenden. Das was du bisher machst ist bereits ein Join aber eben schlechter nachvollziehbar.

Dein GROUP BY ist syntaktisch falsch. In einem GROUP BY müssen alle Spalten aggregiert oder gruppiert werden, das ist hier nicht gegeben. Daher schließe ich mal auf eine alte MySQL-Version, eine neuere Version wird dir korrekterweise die Abfrage nicht mehr ausführen, die alte liefert Müll aus.

Wenn es unterschiedliche Kundennamen zu dem selben Kunden gibt würde der Ausgabewert über die Gruppierung / Aggregierung explizit bestimmt werden, eventuell hilft dir group_concat() weiter, das ist stark abhängig vom verwendeten SQL.
Maffi
Maffi 06.08.2018 um 14:39:24 Uhr
Goto Top
Vielen Dank, mit Join hat es funktioniert.