我需要更新引用兩個表的表。帶有2個連接的更新表
這是我選擇的代碼來驗證哪些行將被更新。
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)
這是我加入3代表的結果。列'div'來自表格div,其依賴於ro_no,而'bpn,s_num,created_by'來自表格temp_db。
現在我想從我的選擇代碼中更新所有選定的行。這是我的更新代碼。
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)
我有三個更新實例。這取決於temp_db(BPN,s_num,DIV)
- 如果s_num和DIV爲空,更新txsh其中sku_id = BPN
- 如果s_num不是null格爲空,更新txsh其中sku_id = BPN和ro_no = s_num
- 如果s_num爲空且div不爲空,則更新txsh其中,表div [t2]的sku_id = bpn和[ro_no]的div值等於temp_db的[div]值。
我在想這個錯誤是在實例[3]上。例如[3]有什麼方法糾正我的where子句?
你爲什麼要加入txsh?如果你刪除這個交叉連接並將UPDATE更改爲「t1」,那麼你的查詢是否工作? –
我會更明確地說明這一點。如果你很高興你的第一個查詢按照預期工作,那麼只需從它的開頭刪除「SELECT *」,用「UPDATE txsh SET price ='0'」取代它,你應該很好。一個CROSS JOIN只會返回該表中的每一行,所以你的第二個查詢將更新txsh中的每條記錄,其餘的查詢完全是多餘的,並且無論如何都可能被優化器忽略。 –
兩個完全不同的查詢具有不同的結果是完全正常的。現在如果相同的確定性查詢返回不同的結果,那麼這將是意想不到的。 –