1. 程式人生 > 其它 >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

如題,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
)