個人數據庫中有一個表story_category
,表中的條目已損壞。 下一個查詢返回損壞的條目: sql
SELECT * FROM story_category WHERE category_id NOT IN ( SELECT DISTINCT category.id FROM category INNER JOIN story_category ON category_id=category.id);
我試圖刪除它們執行: 數據庫
DELETE FROM story_category WHERE category_id NOT IN ( SELECT DISTINCT category.id FROM category INNER JOIN story_category ON category_id=category.id);
可是我獲得了下一個錯誤: spa
#1093-您沒法在FROM子句中指定目標表'story_category'進行更新 code
我該如何克服? get
最近,我不得不更新同一表中的記錄,以下所示: it
UPDATE skills AS s, (SELECT id FROM skills WHERE type = 'Programming') AS p SET s.type = 'Development' WHERE s.id = p.id;
根據@CheekySoft連接的Mysql UPDATE語法 ,它說在底部。 io
當前,您沒法更新表並在子查詢中從同一表中選擇。 table
我猜您正在從store_category中刪除,同時仍在聯合中從中進行選擇。 變量
這就是我在表中及其在WHERE子句中使用同一表上的子查詢> 1時將Priority列值更新爲1的方式,以確保至少一行包含Priority = 1(由於這是執行更新時要檢查的條件): 語法
UPDATE My_Table SET Priority=Priority + 1 WHERE Priority >= 1 AND (SELECT TRUE FROM (SELECT * FROM My_Table WHERE Priority=1 LIMIT 1) as t);
我知道這有點醜陋,但效果確實不錯。
嘗試將Select語句的結果保存在單獨的變量中,而後將其用於刪除查詢。
若是你作不到
UPDATE table SET a=value WHERE x IN (SELECT x FROM table WHERE condition);
由於它是同一張表,因此您能夠欺騙並作到:
UPDATE table SET a=value WHERE x IN (SELECT * FROM (SELECT x FROM table WHERE condition) as t)
[更新或刪除或其餘]