Können Sie eine DB2-WITH-Anweisung verwendet werden, als Teil einer UPDATE-oder MERGE?
Ich aktualisieren müssen einige Zeilen einer DB-Tabelle. Wie ich das identifizieren der zu aktualisierenden Zeilen wurden eine Reihe von komplizierten Aussagen, und ich es geschafft, Kochen Sie Sie nach unten, um eine Reihe von Aussagen. Jetzt habe ich die richtigen Daten Werte, die ich brauche, um die Tabelle zu aktualisieren.
Seit ich es geschafft, diese Werte mit einer WITH-Anweisung, ich hatte gehofft, um es in den UPDATE/MERGE. Ein Vereinfachtes Beispiel folgt:
with data1
(
ID_1
)
as
(
Select ID
from ID_TABLE
where ID > 10
)
,
cmedb.data2
(
MIN_ORIGINAL_ID
,OTHER_ID
)
as
(
Select min(ORIGINAL_ID)
,OTHER_ID
from OTHER_ID_TABLE
where OTHER_ID in
(
Select distinct ID_1
From data1
)
group by OTHER_ID
)
select MIN_ORIGINAL_ID
,OTHER_ID
from cmedb.data2
Nun habe ich die beiden Spalten mit Daten, ich möchte Sie zu benutzen, um die Tabelle aktualisiert. Anstatt also die select an der Unterseite, ich habe versucht, alle möglichen Kombinationen zu mergen und updates, einschließlich der mit der WITH-Anweisung über das UPDATE/MERGE, oder als Teil der UPDATE - /MERGE-Anweisung. Das folgende ist das, was dem am nächsten kommt, in meinem Geist, was ich tun will:
merge into ID_TABLE as it
using
(
select MIN_ORIGINAL_ID
,OTHER_ID
from cmedb.data2
) AS SEL
ON
(
it.ID = sel.OTHER_ID
)
when matched then
update
set it.ORIGINAL_ID = sel.MIN_ORIGINAL_ID
So funktioniert es nicht. Ich bin mir nicht sicher, ob dies überhaupt möglich ist, wie ich gefunden habe, keine Beispiele auf dem internet MIT Anweisungen in Kombination mit der UPDATE-oder MERGE. Ich habe Beispiele MIT Anweisungen verwendet wird, in Verbindung mit FÜGEN, glauben, so könnte es möglich sein.
Wenn jemand helfen kann, würde es groß sein, und bitte lassen Sie mich wissen, wenn ich habe keinerlei Informationen, die nützlich sein würde, um das problem zu lösen.
Disclaimer: das Beispiel, Das ich habe ist ein eingekocht version von dem, was ich versuche zu tun, und kann nicht wirklich einen Sinn!
InformationsquelleAutor Clarkey | 2011-02-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als @Andrew White sagt, Sie nicht verwenden können, eine common table expression, in einer MERGE-Anweisung.
Jedoch, können Sie beseitigen die common table expressions mit verschachtelte subselects. Hier ist dein Beispiel select-Anweisung, geschrieben mit verschachtelte subselects:
Dies ist etwas wirr (die genaue Anweisung geschrieben werden kann, besser), aber ich merke, dass Sie waren nur um ein Vereinfachtes Beispiel.
Können Sie in der Lage sein zu schreiben Sie Ihre MERGE-Anweisung verwendet verschachtelte subselects anstelle von common table expressions. Sicherlich ist es syntaktisch möglich ist.
Beispiel:
Wieder, das ist kompliziert, aber es zeigt, dass es zumindest möglich.
InformationsquelleAutor Ian Bjorhovde
Ich Suche die Grammatik, aber ich bin ziemlich sicher, die Antwort ist Nein. Zumindest nicht in der version von DB2, die ich zuletzt benutzt wurde. Werfen Sie einen Blick auf die update und merge doc-Seiten für die syntax. Auch wenn Sie sehen das fullselect in die syntax, die Sie nicht verwenden können
with
als explizit trennen nach der wählen Sie doc-Seite.InformationsquelleAutor Andrew White
Wenn Sie mit DB2 V8 oder höher, es ist eine interessante SQL-hack hier, das Ihnen erlaubt, um UPDATE/INSERT in einer Abfrage mit einer WITH-Anweisung. Für Einsätze & - updates, die erfordern eine Menge vorläufige Daten prepping, ich finde diese Methode bietet eine Menge Klarheit.
Bearbeiten Eine Korrektur hier - der Auswahl von UPDATE-Anweisungen wurde im V9 glaube ich, also die oben genannten arbeiten werden für Einsätze auf V8 oder größer ist, und updates für V9 oder höher.
InformationsquelleAutor JPistone
Einer Weise zu verwenden, MIT - Anweisung mit UPDATE (und EINFÜGEN auch) ist mit WÄHLEN Sie AUS dem UPDATE - - Anweisung (hier):
InformationsquelleAutor thiago mendes
Andere Methode ist, einfach ersetzen Sie Ihre Abfragen und verwenden nur subselects.
Zum Beispiel, wenn Sie hatte (und ich habe versucht, um ein etwas komplexeres Beispiel mit einigen, WO Logik, die eine Aggregatfunktion (MAX) und eine GRUPPE DURCH, nur um zu zeigen, dass es mehr Reale Welt):
... könnte man daraus etwas passendes für einen ZU VERSCHMELZEN, indem Sie Folgendes tun:
In das Ende, Sie haben gerade SELECT-Abfrage, die so aussieht wie diese (neu formatiert, um zu zeigen, korrekte Einrückung):
Ich habe das getan in meiner eigenen persönlichen Erfahrung (gerade jetzt) und es funktioniert perfekt.
Glück.
InformationsquelleAutor Bob
Setzen die Allgemeine Tabellenausdrücke in eine Ansicht und wählen Sie aus der Sicht in der Zusammenführung. Sie erhalten eine saubere, gut lesbare Ansicht, dass die Art und Weise, und eine saubere, gut lesbare Zusammenführen.
InformationsquelleAutor Bruce Jameison