2016-05-11 5 views
-8

Ich möchte Datensätze aus zwei Tabellen anzeigen.Alternative für vollständige äußere Verknüpfung in indizierter Sicht

Es sollte alle übereinstimmenden Datensätze aus beiden Tabellen zurückgeben.

Wenn ein Datensatz in der ersten Tabelle vorhanden ist und in der zweiten Tabelle nicht vorhanden ist, sollte er null aus der zweiten Tabelle und Datensätze aus der ersten Tabelle zurückgeben. Wenn ein Datensatz in der zweiten Tabelle vorhanden ist und nicht in erster Tabelle aus der ersten Tabelle und Datensätze aus der zweiten Tabelle null zurück, sollte

Ich will nicht ein full outer join verwenden, weil ich ein indizierte erstellen möge Ansicht und äußere Verknüpfungen (Links, Rechts, Voll) sind in der indizierten Sicht nicht zulässig.

Gibt es für dieses Szenario eine bessere Lösung?

+7

Warum möchten Sie nicht 'full join' verwenden? Es ist für Situationen wie diese gedacht – HoneyBadger

+4

Die Alternative ist eine Vereinigung über zwei linken Verbindungen. Aber warum willst du das tun? –

Antwort

1

Es gibt eine workaround für indizierte Sichten mit 'emulierten äußeren Joins'. Aber es ist scheußlich und ich würde es nicht befürworten.

Eine bessere Lösung wäre, die zugrunde liegenden Tabellen zu indizieren und die gesamte Ansicht zu überspringen. Oder erstellen Sie zwei indizierte Sichten und führen Sie in der Abfrage, die die Sichten aufruft, die outer join aus.

Eine andere Lösung besteht darin, keine indizierte Sicht zu erstellen, sondern eine tatsächliche Tabelle (die Sie mit Triggern auf dem neuesten Stand halten können) und Indizes dafür zu setzen. Da Sie die Ansicht trotzdem materialisieren, könnte dies die beste Lösung sein.

Aller Wahrscheinlichkeit nach wird eine indizierte Sicht (welche Methode Sie auch wählen) nicht das Ergebnis liefern, das Sie suchen (obwohl die letzte Methode, bei der Sie eine tatsächliche Tabelle erstellen). Können Sie erklären, warum Sie in diesem speziellen Fall eine indizierte Sicht benötigen?

By the way, here ist eine (kurze) Erklärung warum indizierte Sichten outer joins nicht zulassen.

+0

Vielen Dank. – Prince

+0

Gern geschehen. Für zukünftige Fragen möchten Sie vielleicht Ihre Anforderungen ein bisschen mehr erklären. Du wurdest oft abgelehnt, weil die Leute nicht wussten, warum du keine Outer-Joins verwenden kannst. – HoneyBadger

0

Bei Ihrer Anforderung sollten Sie die vollständige äußere Verbindung verwenden. Wenn Sie eine Alternative wünschen ... können Sie den folgenden Ansatz verwenden.

sel cola,colb,colc... from table a where colmnlist not in (select columnlist  from table b) 
union all 
sel cola,colb,colc from table b where colmnlist not in (select columnlist  from table a) 

Aber jeder spezifische Grund, warum Sie in diesem Fall vollständige äußere Verbindung vermeiden möchten.

+1

Beachten Sie, dass UNION Duplikate entfernt, FULL OUTER JOIN nicht. – jarlh

+0

richtig rechts .. ich wollte nur einen groben Entwurf der Logik geben .. idealerweise sollte es Union sein alle in diesem Fall @ Jarlh –

+0

Ich möchte indizierte Sicht erstellen und Outer Join nicht erlaubt in indizierten Ansichten. – Prince

Verwandte Themen