Dies wäre SQL-Server Syntax wäre, und ich bin ziemlich sicher, dass dies überkreuzt, aber ich habe einige Artikel gesehen, die für mysql andere Syntax vorschlagen. Aber verwenden Sie grundsätzlich eine join
oder where
Klausel, die relate
die Tabellen und dann eine case
Anweisung verwenden, um Ihren Wert zu wählen. In der folgenden Lösung werden Sie nie die ELSE
der case
-Anweisung verwenden, aber für eine gute Maßnahme verweisen Sie auf den aktuellen Spaltenwert für alles, was zu Ihren join
aber nicht Ihren case
Kontoauszugsbedingungen passen würde.
ein
UPDATE a
SET Column1 = CASE
WHEN b.Column1 = 1111 THEN b.Column2
WHEN b.Column1 = 2222 THEN b.Column3
ELSE a.Column1
END
FROM
[DatabaseA].TableA a
INNER JOIN [DatabaseB].TableB b
ON a.Column4 = b.Column4
AND (
(b.Column1 = 1111 AND b.Column2 IS NOT NULL)
OR
(b.Column1 = 2222 AND b.Column3 IS NOT NULL)
)
Per Ihr Kommentar nicht eine Verknüpfung mit JOIN verwenden.
UPDATE a
SET Column1 = CASE
WHEN b.Column1 = 1111 THEN (SELECT b.Column2 FROM TableB WHERE b.Column4 = a.Column4)
WHEN b.Column1 = 2222 THEN (SELECT b.Column3 FROM TableB WHERE b.Column4 = a.Column4)
ELSE a.Column1
END
FROM
TableA
WHERE
EXISTS (
SELECT *
FROM
TableB
WHERE
b.Colmn4 = a.Column4
AND (
(b.Column1 = 1111 AND b.Column2 IS NOT NULL)
OR
(b.Column1 = 2222 AND b.Column3 IS NOT NULL)
)
so verrückt aussieht, aber es wird aktualisiert, nur die Zeilen, die Sie beabsichtigen. Andernfalls, wenn es Ihnen egal ist, wenn Sie die gesamte Spalte aktualisieren, können Sie so etwas tun.
Sie können es auch mit einem einzelnen Subselect tun, wenn Sie bereit sind, die gesamte Tabelle zu aktualisieren.
UPDATE a
SET Column1 = ISNULL(
( SELECT (CASE WHEN b.Column1 = 1111 THEN b.Column2 ELSE b.Column3 END)
FROM
TableB
WHERE
b.Colmn4 = a.Column4
AND (
(b.Column1 = 1111 AND b.Column2 IS NOT NULL)
OR
(b.Column1 = 2222 AND b.Column3 IS NOT NULL)
)
),a.Column1)
FROM
TableA
Der Trick in all diesen Antworten, die Sie haben die SELECT-Anweisung von TableB mit TableA beziehen zu können, sonst werden Sie nicht Ihr gewünschtes Ergebnis bekommen.
Sie würden case-Anweisungen verwenden, um der Abfrage zu ermöglichen, Werte unter verschiedenen Bedingungen festzulegen, die Sie hier haben. Das ähnelt Ihrem Problem: http://stackoverflow.com/questions/35533828/how-to-combine-two-update-queries-having-different-where-condition. – Dresden
Wenn Ihre Abfragen jetzt gelesen werden, besteht keine Verbindung zwischen tableA und tableB. Ist das korrekt? – nscheaffer
@Dresden die Sache ist, dass die Case-Anweisungen erlauben mir nicht zu tun "von wo auswählen" –