MySQL Ergebnismenge aus mehreren Tabellen

bauchinj

Erfahrenes Mitglied
Hallo!

Gegeben sind mehrere Tabellen. Beispiel:

Kunden:
id
int
name
varchar
email
varchar
telefon
varchar


Artikel:
id
int
bezeichnung
varchar
preis
float

Artikel-Kundenzuordnung:
id
int
artikel
int
kunde
int

Rechnungspositionen:
idint
datum
date
artikel-kunde
int

Gutschriftspositionen:
idint
datum
datetime
artikel-kundeint


Es sollen nun für einen Kunden alle Rechnungen und Gutschriften in einem SQL ausgewertet werden. Mit 2 SQLs ist es kein Problem, wie schaffe ich es aber, nur einen SQL dafür zu verwenden?

Ergebnis soll ungefähr so aussehen:
Kundenname
Artikelname
ReDat
GuDat
Huber
Zahnbürste
2013-01-20
---
Huber
Zahnbürste
2013-02-07
---
Huber
Zahnbürste
2013-02-15
---
Huber
Zahnbürste
---
2013-01-25
Huber
Zahnbürste
---
2013-02-17


Ich habs schon soweit geschafft, dass ReDat und GuDat gleichzeitig befüllt waren, möchte aber, dass natürlich ReDat und GuDat in einer extra Zeile ausgewertet werden.

Danke für eure Hilfe!
 
Ich habs schon soweit geschafft, dass ReDat und GuDat gleichzeitig befüllt waren, möchte aber, dass natürlich ReDat und GuDat in einer extra Zeile ausgewertet werden.

Dann nehme ich mal an, dass genau dieselbe artikel-kunde id in beiden Tabellen Rechnungspositionen und Gutschriftspositionen vorkommt?

Dann brauch doch einfach UNION ALL:

select kunde, artikel, redat, NULL as gudat from....
UNION ALL
select kunde, artikel, NULL as redat, gudat from....
 
Danke für die Antwort. Habs so versucht - funktioniert für die ID, für das Datum leider nicht:


SELECT `id` AS `ReId`, NULL AS `GuId`, `datum` AS `ReDat`, NULL AS `GuDat` FROM `rechnungspos`
UNION ALL
SELECT NULL AS `ReId`, `id` AS `GuId`, `datum` AS `GuDat`, NULL AS `ReDat` FROM `gutschriftspos`

liefert 4 Spalten, Ids sind getrennt, Datum steht immer in ReDat und NULL steht immer in GuDat...
komisch, oder?
 
nein, gar nicht komisch sondern absolut logisch. die spaltennamen werden vom ersten select query genommen und im zweiten schreibst du dann ja auch in die zweitletzte spalte das datum und in die letzte null...
in meinem beispiel waren die vertauscht:

SELECT `id` AS `ReId`, NULL AS `GuId`, `datum` AS `ReDat`, NULL AS `GuDat` FROM `rechnungspos`
UNION ALL
SELECT NULL AS `ReId`, `id` AS `GuId`, NULL AS `ReDat`, `datum` AS `GuDat` FROM `gutschriftspos`

ps: warum machst du dasselbe auch mit der id? da ist das eigentlich doch nicht nötig, oder?
 
Zurück