Neuigkeiten:

still alive...

Hauptmenü

Zwei rows im gleichen statement auslesen

Begonnen von roli, 10. Februar 2010, 13:13:01

Vorheriges Thema - Nächstes Thema

roli

Hallo zusammen
ich habe eine Frage:
Ich habe zwei  Tabellen \"USERS\" und \"CONTACT\".
Die USER tabelle sieht so aus
 


USER_ID | NAME | VORNAME
1 | Müller | Rudolf
2 | Schwager | Jürg

 
 
Die CONTACT tabelle sieht so aus
 


USER_ID | FIELD_DESC | FIELD_VALUE
1 | Phone1 | 1234567
1 | Phone2 | 0987654
2 | Phone1 | 5678944
2 | Phone2 | 3647594

 
 
Nun möchte ich die Ausgabe wie folgt gestalten
Name | Vorname | Phone 1 | Phone 2
wie schreibe ich nun das select statement, dass ich quasi zwei rows im gleichen SQL statement abarbeiten kann.
Select
A.Name as Name ,A.Vorname as Vorname, B.FIELD_VALUE as PHONE1, B.FIELD_VALUE as PHONE2 from USERS A join CONTACT B on A.USER_ID=B.USER_ID where  ....
nun wie definiere ich aber, dass ich unter B.FIELD_VALUE einmal den Wert für Phone 1 bekomme und einmal den Wert für Phone 2 ? Wenn ich eine where klausel mache, klappt dies wenn ich nur eine telnummer definiere, also where B.FIELD_DESC =\'Phone1\', jedoch bei zwei Zeilen geht dies logischerweise nicht mehr. doch wie kann ich es dann lösen ?
vielen dank für die hilfe
roland

Powie

Select u.name, u.vorname, a.field_value, b.field_value
From users u
Left Join CONTACT a on a.user_id = u.user_id and a.field_desc = \'Phone1\'
Left Join CONTACT b on b.user_id = u.user_id and a.field_desc = \'Phone2\'

roli


raiser

Ã,,hm, wenn man so ein Ergebnis hat - stimmt irgendwas nicht mit dem DB-Design.
Warum gibt es eine Tabelle \"Kontakt\" - doch nur, wenn ein \"Ding\" mehrere \"Kontakte\" hat.
oder....
Wenn sich meherere Dinger einen Kontakt teilen.
In diesem Fall ist aber die Telefonnummer(n) einem bestimmten Ding zugeteilt. Aus diesem Grund ergibt es keinen Sinn .. eine 1:1 in eine extra Tabelle zu werfen.
Sry, wenn ich ältere Leichen wecken muss - aber wenn man schon anfängt, sich mit DB-design und deren Abfragegestalltung auseinander zu setzen,
dann auch gleich richtig. Also wenigstens bis zur 3.NF sollte eine DB schon erstellt werden - alles darüber ist IMO wissenschaftliche Krümelkacke.
 
lG Henrik

Wissen ist das einzige Gut, dass sich vermehrt, wenn man es teilt! (Marie von Ebner-Eschenbach)




Irren ist menschlich!




Wer andern eine Grube gräbt,


sollte darüber nachdenken,


ob sie tief genug ist!!!!




Kameradschaft ist, wenn der


Kamerad schafft !!!!


all your base are belong to us / Discord