2016-05-05 9 views
0

Ich bin neu zu Orakel das könnte einfach sein. Aber ich möchte überprüfen, ob unter Union alle mit einer Art von Join ersetzt werden können.Ersetzen Sie Union alle zwischen drei Tabellen als Join

select a.col1,a.col2,a.col3 from b,a 
where a.col3=b.col3 and a.col4= b.col4 
and b.col5= --filter conditions 
union all 
select a.col1,a.col2,a.col3 from c,a 
where C.col3=b.col3 and c.col4= b.col4 
and c.col5= --filter conditions 
and c.col6= -- extra conditions 

Vielen Dank im Voraus

+0

Können Sie ein konkretes Beispiel dafür geben, was a, b und c darstellen? Oder zumindest was die Fremdschlüssel sind? Dies ist möglich, aber Sie müssen wissen, die pk/fk Beziehungen –

Antwort

0

Sie sollten Ihren vorhandenen Code mit join schreiben. Einfache Regel: Nie Kommas in der FROM Klausel verwenden. Immer verwenden explizite JOIN Syntax.

In Ihrem Fall, wenn, würde ich für exists gehen:

select a.* 
from a 
where exists (select 1 
       from b 
       where a.col3 = b.col3 and a.col4 = b.col4 and . . . 
      ) or 
     exists (select 1 
       from c 
       where c.col3 = b.col3 and c.col4 = b.col4 and . . . 
      ); 

Hinweis: Ihre ursprüngliche Abfrage doppelte Zeilen in a zurück, wenn es mehr Spiele in entweder b oder c. Diese Version gibt solche Duplikate nicht zurück. Normalerweise ist das gewünschte Verhalten nicht das Zurückgeben von Duplikaten.

+0

danke für die Antwort gordon .. ich habe noch eine kleine zwicken .. hier statt a. * Wenn die Wahl der Auswahl b. * Und c. * Wie würde das die Abfrage ändern, wie ich alle6 Spalten anzeigen muss, aber ich will sie nur als 3 wählen Sie b. * von b verbinden a wo a.col = a.col union alle wählen Sie c. * aus c Join a wo c.col = a.col – waiting

+0

Sie sollten eine andere Frage stellen. Die naive Verwendung von 'join' erzeugt wahrscheinlich doppelte Zeilen in der Ergebnismenge. –

0

Bitte überprüfen Sie, ob es zu u ist voll helfen dann

Select a.col1, a.col2, a.col3 von einem LEFT JOIN b

auf a.col3 = b.col3 und a. col4 = b.col4 und b.col5 = - filter cindition left join c

auf c.col3 = b.col3 und c.col4 = b.col4 und c.col5 = Filterbedingung und c.col6 = - - zusätzliche Bedingungen