Falscher Rückgabewert in einfachem Select?

nebelparder

Neuer Benutzer
Beiträge
3
Hallo zusammen

Für ein Schulprojekt habe ich gerade mehrere SQL-Statements erstellt.
Nun hat sich gezeigt, dass bei einem einfachen Select der Rückgabewert nicht korrekt ist - zumindest erhalte ich nicht das gewünschte/erwartete Ergebnis.


Setting:

Die Tabelle kd_beziehungen enthält alle wesentlichen Informationen zu einer Beziehung zweier Kunden. Die Kundennummer des erstellenden Kunden wird in der Spalte von_kdnr, diejenige des Kunden zu dem die Beziehung besteht in der Spalte zu_kdnr gespeichert.

Die Tabelle kd_stamm enthält die wesentlichen Informationen zum Kunden. ID ist die Kundennummer.


Statement:

SELECT x.id as ID, x.von_kdnr as 'Kunde 1', CONCAT(a.name,', ',a.vorname) as 'Name, Vorname', x.zu_kdnr as 'Kunde 2', CONCAT(b.name,', ',b.vorname) as 'Name, Vorname' FROM kd_beziehungen x INNER JOIN kd_stamm a ON (x.von_kdnr = a.kundennr) INNER JOIN kd_stamm b ON (x.zu_kdnr = b.kundennr) WHERE von_kdnr = 123456 OR zu_kdnr = 123456;


Rückgabewert:

Als Name und Vorname wird nicht wie erwartet Name und Vorname des zu_kdnr sondern wiederum Name und Vorname des von_kdnr ausgegeben.


Ich versteh einfach nicht wieso.... und hoffe, dass ihr mir hier helfen könnt :(

Im Voraus schon mal vielen lieben Dank ;) :)


Gruss nebelparder
 
Werbung:
Statement:

SELECT x.id as ID, x.von_kdnr as 'Kunde 1', CONCAT(a.name,', ',a.vorname) as 'Name, Vorname', x.zu_kdnr as 'Kunde 2', CONCAT(b.name,', ',b.vorname) as 'Name, Vorname' FROM kd_beziehungen x INNER JOIN kd_stamm a ON (x.von_kdnr = a.kundennr) INNER JOIN kd_stamm b ON (x.zu_kdnr = b.kundennr) WHERE von_kdnr = 123456 OR zu_kdnr = 123456;


Rückgabewert:

Als Name und Vorname wird nicht wie erwartet Name und Vorname des zu_kdnr sondern wiederum Name und Vorname des von_kdnr ausgegeben.


Ich versteh einfach nicht wieso.... und hoffe, dass ihr mir hier helfen könnt :(

Meine Vermutung: Du greifst mit einem externen Client zu und hier auf die Spalte 'Name, Vorname', welche im Resultat doppelt vorkommt. Shit In, Shit Out - Du greifst immer auf dieselbe Spalte zu. Benenne sie einfach unterschiedlich und gut ist.
 
Perfekt.. Jetzt funktionierts. :)

Ein Problem hab ich aber noch mit einem anderen Statement:


Statement:

SELECT x.id as ID, CONCAT(k1.name,', ',k1.vorname) as 'Kunde', CONCAT(k2.name,', ',k2.vorname) as 'Partner', z.bezeichnung as 'Zivilstand',g.bezeichnung as 'Güterstand'
FROM kd_familie x
INNER JOIN kd_stamm k1 ON (x.kundennr = k1.kundennr)
INNER JOIN kd_stamm k2 ON (x.partner = k2.kundennr)
INNER JOIN kd1zivil z ON (x.zivilstand = z.id)
INNER JOIN kd1guets g ON (x.gueterstand = g.id)
WHERE x.kundennr = 123456 OR x.partner = " + kdnr;


Rückgabewert:

Aktuell liefert das Statement nur Datensätze, bei denen ein Partner angegeben wurde. Dies ist jedoch nur der Fall, wenn der Kunde in einer Beziehung lebt. Singles (sprich Datensätze, in denen partner = null) werden somit aktuell nicht berücksichtigt. Nur: wie müsste das Statement lauten, um wirklich alle Datensätze zu erhalten? :(
 
Jetzt hab ichs mal so probiert... aber das funktioniert nicht wirklich...

SELECT x.id as ID, CONCAT(k1.name,', ',k1.vorname) as 'Kunde', CONCAT(k2.name,', ',k2.vorname) as 'Partner', z.bezeichnung as 'Zivilstand',g.bezeichnung as 'Güterstand'
FROM kd_familie x
INNER JOIN kd_stamm k1 ON (x.kundennr = k1.kundennr)
INNER JOIN kd_stamm k2 ON (x.partner = COALESCE(k2.kundennr,0))
INNER JOIN kd1zivil z ON (x.zivilstand = z.id)
INNER JOIN kd1guets g ON (x.gueterstand = g.id)
WHERE x.kundennr = 123456 OR x.partner = 123456
 
Werbung:
Zurück
Oben