SQL wenn id != null, zusätzliche Zeile einfügen

GustlPC

Lt. Junior Grade
Registriert
Nov. 2008
Beiträge
338
Hallo,

ich habe folgende Tabelle:
rs_idrs_u_idname
1nullrs_name_1
2nullrs_name_2
39rs_name_3
410rs_name_4
5nullrs_name_5
6nullrs_name_6
7nullrs_name_7
8nullrs_name_8
9nullrs_name_9
10nullrs_name_10

Wenn rs_u_id != null ist, dann hat dieser Datensatz noch eine weitere rs_id.
Diese brauche ich dann genau darunter. Abfrage sollte folgendes Ergebnis liefern:
1nullrs_name_1
2nullrs_name_2
39rs_name_3
9nullrs_name_9
410rs_name_4
10nullrs_name_10
5nullrs_name_5
6nullrs_name_6
7nullrs_name_7
8nullrs_name_8
9nullrs_name_9
10nullrs_name_10

Leider habe ich keine Ahnung wie ich da ansetzen soll.

Vielleicht mit UNION? Aber wie?

Hat wer eine Idee?

Gruß,
Gustl
 
Ungefähr so:

select *
from folgende_tabelle
union
select rs_u_id, null, name
from folgende_tabelle
where rs_u_id is NOT null
 
Zuletzt bearbeitet:
Warum darunter, obwohl die Datensätze offensichtlich zusammengehören? So sind sie ja doch voneinander getrennt. Mach einfach nen LEFT JOIN an der rs_u_id und gut.
 
Muss die Ausgabe genau so aussehen? oder ist es für dich erlaubt eine Pseudospalte mitzuführen?
 
Ich hab's auf dem MS SQL Server mal nachgestellt. Das hier funktioniert:

select rs_id,rs_u_id,name from
(
select rs1.rs_id as rs1_id,rs1.rs_id as rs_id, rs1.rs_u_id as rs_u_id, rs1.name as name from rs rs1
union
select rs1.rs_id as rs1_id,rs2.rs_id as rs_id, rs2.rs_u_id as rs_u_id, rs2.name as name
from rs rs1
inner join rs rs2 on rs1.rs_u_id=rs2.rs_id
) sub

Ergebnis:
rs_id rs_u_id name
1 NULL name1
2 NULL name2
3 9 name3
9 NULL name9
4 10 name4
10 NULL name10
5 NULL name5
6 NULL name6
7 NULL name7
8 NULL name8
9 NULL name9
10 NULL name10


PS: Ohne Gewähr für Performance ;)
PPS: Sogar ohne "order by rs1.rs_id
 
Zuletzt bearbeitet:
Also, einfach eine Abfrage zusätzlich gewrappt, damit die Pseudospalte nicht angezeigt wird.

Code:
SELECT 
 ID, ID_U, text
FROM (
  SELECT * FROM (
    SELECT
     A.ID PSEUDOID, B.*
    FROM TESTTABLE1 A
    INNER JOIN TESTTABLE1 B ON A.ID_U = B.ID
    UNION ALL
    SELECT
     A.ID PSEUDOID, A.*
    FROM TESTTABLE1 A
  )
  ORDER BY PSEUDOID, ID
)

getestet in Oracle und mit deinem gewünschten Ergebnis.

//edit: aus reinen Performancegründen eine Subquery geändert...
 
Zuletzt bearbeitet:
Zurück
Oben