Ich muss Tabelle aktualisieren, die auf zwei weitere Tabellen verweist.Update-Tabelle mit 2 Join
Hier ist mein Auswahlcode um zu überprüfen, welche Zeilen aktualisiert werden.
SELECT *
FROM txsh AS t1
INNER JOIN div AS t2 ON t2.store = t1.ro_no
INNER JOIN temp_db AS t3 ON t3.bpn = t1.sku_id
AND (t3.div IS NULL OR t3.div = t2.div)
AND (t3.s_num IS NULL OR t3.s_num = t1.ro_no)
Dies ist das Ergebnis der drei Tabellen, die ich verbunden. Die Spalte 'div' stammt aus der Tabelle div, die von ro_no abhängt, während 'bpn, s_num, created_by' aus der Tabelle temp_db stammt.
Jetzt möchte ich alle ausgewählten Zeilen aus meinem Auswahlcode aktualisieren. Hier ist mein Update-Code.
UPDATE txsh
SET price = '0'
FROM txsh AS t1
INNER JOIN temp_db AS t2 ON t1.sku_id = t2.bpn
CROSS JOIN div AS t3
CROSS JOIN txsh
WHERE (t2.div IS NULL OR t3.div = t2.div)
AND (t2.s_num IS NULL OR t2.s_num = t1.ro_no)
Ich habe drei Instanzen für das Update. Es hängt von temp_db (BPN, s_num, div)
- wenn s_num und div null ist, zu aktualisieren txsh wo sku_id = bpn
- wenn s_num nicht null ist und div ist null, update txsh wo sku_id = bpn und ro_no = s_num
- Wenn s_num null ist und div nicht null ist, txsh aktualisieren, wobei sku_id = bpn und [ro_no] 's div-Wert aus Tabelle div [t2] gleich temp_db [div] -Wert ist.
Ich denke, dass der Fehler auf Instanz [3] ist. Gibt es eine Möglichkeit, meine Where-Klausel zum Beispiel [3] zu korrigieren?
Warum in der Welt sind Sie Kreuz Beitritt zu Txsh? Wenn Sie diesen Cross-Join entfernen und das UPDATE stattdessen auf "t1" setzen, funktioniert Ihre Abfrage dann? –
Ich werde das deutlicher machen; Wenn Sie froh sind, dass Ihre erste Abfrage wie gewünscht funktioniert, entfernen Sie einfach die "SELECT *" von Anfang an, ersetzen Sie dies durch "UPDATE txsh SET price = '0'" und Sie sollten gut gehen. Ein CROSS JOIN bringt nur jede Zeile in dieser Tabelle zurück, so dass Ihre zweite Abfrage nur jeden Datensatz in txsh aktualisiert, der Rest der Abfrage ist völlig redundant und wird wahrscheinlich sowieso vom Optimierer ignoriert. –
Es ist völlig normal, dass zwei völlig verschiedene Abfragen unterschiedliche Ergebnisse haben. Wenn die gleiche deterministische Abfrage nun andere Ergebnisse liefert, wäre das unerwartet. –