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)

[更新或删除或其余]

相关文章
相关标签/搜索