MySQL錯誤1093-沒法在FROM子句中指定目標表進行更新

個人數據庫中有一個表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


#1樓

最近,我不得不更新同一表中的記錄,以下所示: it

UPDATE skills AS s, (SELECT id  FROM skills WHERE type = 'Programming') AS p
SET s.type = 'Development' 
WHERE s.id = p.id;

#2樓

根據@CheekySoft連接的Mysql UPDATE語法 ,它說在底部。 io

當前,您沒法更新表並在子查詢中從同一表中選擇。 table

我猜您正在從store_category中刪除,同時仍在聯合中從中進行選擇。 變量


#3樓

這就是我在表中及其在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);

我知道這有點醜陋,但效果確實不錯。


#4樓

嘗試將Select語句的結果保存在單獨的變量中,而後將其用於刪除查詢。


#5樓

若是你作不到

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)

[更新或刪除或其餘]

相關文章
相關標籤/搜索