sql 報錯:Table is specified twice, both as a target for 'UPDATE' and as a separate source for data


如題,sql 報錯:Table is specified twice, both as a target for 'UPDATE' and as a separate source for data。表被指定了兩次,同時作為 update 對象和獨立數據源。

報錯場景:查詢兩個表的差集並更新記錄。舉例說明:a、b 兩表聯查,找出 a 表中存在 b 表不存在的記錄,然后更新 a 表的某個字段做標記。

報錯 sql

UPDATE company AS f SET related = 0 WHERE uid IN 
(
select c.uid FROM company AS c 
LEFT JOIN member AS m ON m.uid=c.uid 
WHERE m.uid IS NULL
)

解決方法

既然一個表不能同時作為 update 對象和獨立數據源,那就改變其中一個。update 為主句,不可能去掉,那就只能修改作為數據源部分的表。將兩表聯查的結果作為一個臨時表,在外層在加一層查詢。這樣數據源變成了臨時表,而非之前聯查的兩個表。

UPDATE company AS f SET related = 0 WHERE uid IN (
SELECT * FROM 
(
select c.uid FROM company AS c 
LEFT JOIN member AS m ON m.uid=c.uid 
WHERE m.uid IS NULL
) AS d
)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM