SQL Abfrage gibt Ergebnisse mehrfach aus?
Hey,
ich habe zu lernzwecken über phpMyAdmin eine Datenbank erstellt. In der bestehen bislang zwei Tabellen, die auch nur aus jeweils zwei Merkmalen bestehen, nämlich einer ID und einem Zahlenwert. Ich habe jetzt versucht mittels SQL-Befehl mir die beiden Werte nebeneinander anzeigen zu lassen. Folgender Code sollte das realisieren:
SELECT einnahmen.wert, ausgaben.wert
FROM einnahmen, ausgaben
Das Problem ist nun aber, dass die ausgegebenen Werte alle doppelt bzw. die der anderen Tabelle fünfach vorhanden sind. Es scheint so, als könne meine Datenbank keine zwei Spalten von unterschiedlicher Länge ausgeben.
Im Anhang Bilder zum besseren Verständnis.
Danke :)
3 Antworten
Deine Abfrage ergibt keinen Sinn. Du gibst einfach beide Tabellen zusammen aus.
Willst du Einträge aus einer Tabelle mit einer anderen Tabelle über eine ID verknüpfen, solltest du das per Join machen. In der MySQL Doku findest du, wenn du nach Join suchst, einfache Beispiele.
Bin nicht sicher, ob du in deinem Biespiel was verknüpfen willst.
Ansonsten kann man per UNION auch SELECTs zusammenführen.
Das ist schon richtig so, wie soll die Datenbank die denn auch anders ausgeben?
Wenn Du beide Tabellen zusammen ausgegeben haben willst, dann musst Du der Datenbank mitteilen, welche der Zeilen von beiden Tabellen zusammen geführt werden sollen. Tust Du das nicht, wird jede Zeile von Tabelle 1 pro Zeile von Tabelle 2 ausgegeben. Wenn deine zweite Tabelle also 3 Zeilen hat anstatt 2, dann würdest Du alles dreifach ausgegeben bekommen.
Was Du suchst, ist ein Join. Damit kannst Du angeben, über welche Spalte die beiden Tabellen verknüpft werden sollen.
In der Regel hat eine Tabelle dann eine ID der anderen tabelle als eigene Spalte, dann könntest Du schreiben:
SELECT *
FROM Table1
JOIN Table2 ON Table2.IdTable1 = Table1.Id
Probiere damit mal rum. Das zu erklären, würde viele Seiten kosten, das probierst Du lieber selber aus.
Du kannst dir ja auch mal dieses Merk-Bild anschauen:
Quelle: https://www.fachinformatiker.de/topic/156801-sql-join/?do=findComment&comment=1460651

Was willst du denn da nebeneinander anzeigen lassen
Um ehrlich zu sein verstehe ich das nicht :D Einnahmen und Ausgaben sind doch was vollkommen anderes. Es muss ja ein bestimmtes Kriterium geben für die Wertepaare.
Ich würde das mit den zwei Tabellen über den Haufen schmeißen und eine Tabelle "Buchungen" machen, die alle Buchungen hält. Ausgaben werden als negativer Wert abgespeichert, Einnahmen als positiver Wert. Alle Buchungen werden chronologisch auf den ursprünglichen Kontostand (0) ausgeführt. Das ist dann dein aktuelles "Vermögen".
Die beiden 'wert' -Spalten aus den Tabellen 'Einnahmen' und 'Ausgaben'. Ursprünglich war die Idee aus diesen beiden Tabellenspalten jeweils die Summe zu errechnen um dann eine Differenz bilden zu können die in meiner Übungsdatenbank sozusagen das Vermögen abbildet. Das funktioniert nur leider aufgrund des geschilderten Problems nicht.