2016-06-29 5 views
0

Wie kann ich eine ORACLE Abfrage für die folgende Anforderung erstellen?Wie wird eine Tabelle mit selektiven doppelten Datensätzen verknüpft? (oracle10g)

Die Frage ist Wenn dieselbe ID in einigen SQL-Ergebnissen existiert, wie kann ich den Datensatz dieser ID erhalten, deren Name nicht leer oder NULL ist.

 
Pattern(1) 
SQL1 => RESULT1 => ID  NAME 
        ----- ------ 
         001 
         002 
         003

SQL2 => RESULT2 => ID NAME ----- ------ 003 NAME1

SQL3 => RESULT3 => ID NAME ----- ------ 003 NAME2

 
Pattern(2) 
SQL1 => RESULT1 => ID  NAME 
        ----- ------ 
         001 
         002 
         003 NAME1

SQL2 => RESULT2 => ID NAME ----- ------ 003

SQL3 => RESULT3 => ID NAME ----- ------ 003 NAME2

 
Pattern(3) 
SQL1 => RESULT1 => ID  NAME 
        ----- ------ 
         001 
         002 
         003

SQL2 => RESULT2 => ID NAME ----- ------ 003 NAME1 003 NAME2

SQL3 => RESULT3 => ID NAME ----- ------

Wie kann ich beitreten diese 3 Ergebnisse das folgende Ergebnis zu werden?

 
         ID  NAME 
        ----- ------ 
         001 
         002 
         003 NAME1 
         003 NAME2 

Antwort

1

Das für Ihr Szenario arbeiten

with tbl(id,name) as 
(query1 
union all 
query2 
union all 
query 3 
) 
select * From tbl where name is null 
and id not in 
    (select id from tbl where name is not null) 
union all 
select * from tbl where name is not null 

Ich habe Musterbeispiel erstellt

with tbl(id,name) as 
(select 1,null from dual union all 
select 2,null from dual union all 
select 3,null from dual union all 
select 3,'NAME1' from dual union all 
select 3,'NAME2' from dual) 

select * From tbl where name is null 
and id not in 
    (select id from tbl where name is not null) 
union all 
select * from tbl where name is not null 

Ausgabe

id name 
--------- 
1 
2 
3 NAME1 
3 NAME2 
+0

Vielen Dank für Ihre Antwort, Bruder! – hmmh

2

Eine Möglichkeit wäre, zusammen zu UNION werden die SQL2 und SQL3 Tabellen, und dann dieses Ergebnis kommen zurück zu SQL1:

SELECT t1.ID, t1.NAME 
FROM SQL1 t1 LEFT JOIN 
(
    SELECT ID, NAME 
    FROM SQL2 
    UNION ALL 
    SELECT ID, NAME 
    FROM SQL3 
) t2 
    ON t1.ID = t2.ID 
+0

Danke bro. Entschuldigung für meine irreführende Frage. Die Ergebnisse jedes SQL können variieren. Ich habe die Frage aktualisiert. Die Frage ist, wenn dieselbe ID in einigen SQL-Ergebnissen existiert, wie kann ich den Datensatz dieser ID erhalten, dessen Name nicht leer oder NULL ist. – hmmh

+0

Ihre Frage ist jetzt unklar. Bitte aktualisieren Sie erneut und zeigen Sie Beispieltabellen (keine Diagramme) für die Eingabe und die erwartete Ausgabe an. –

Verwandte Themen