首页 文章

MySQL错误您无法在FROM子句中指定要更新的目标表

提问于
浏览
0

我的数据库中有2个表MST_customer和TRN_sales,包含损坏的条目 . 下一个查询返回损坏的条目:

SELECT TRN_sales.cust_no 
FROM MST_customer 
RIGHT OUTER JOIN TRN_sales 
ON MST_customer.cust_no = TRN_sales.cust_no 
WHERE MST_customer.cust_name IS NULL;

我试图删除它们执行:

DELETE FROM mydbB.TRN_sales
WHERE TRN_sales.cust_no IN (
  SELECT TRN_sales.cust_no
  FROM MST_customer
  RIGHT OUTER JOIN TRN_sales
  ON MST_customer.cust_no = TRN_sales.cust_no
  WHERE MST_customer.cust_name IS NULL
);

但是我得到了下一个错误:

You can't specify target table 'TRN_sales' for update in FROM clause

我该如何解决这个问题?

2 回答

  • 1

    要更多地了解"the safe side",您应该指定要从中删除的表(此处:别名 s ):

    DELETE s FROM TRN_sales s
    LEFT JOIN MST_customers ON MST.cust_no=TRN.cust_no
    WHERE MST.cust_name IS NULL;
    

    Personnaly我相信,这个 LEFT JOIN 更容易阅读,虽然你当然可以对你的 RIGHT JOIN 版本做同样的事情 .

  • 1

    为什么你不尝试下面 -

    DELETE TRN.*
    FROM MST_customer MST
    RIGHT OUTER JOIN TRN_sales TRN
    ON MST.cust_no = TRN.cust_no 
    WHERE MST.cust_name IS NULL;
    

    注意:为了安全起见,请在执行此查询之前保留两个表的备份 .

相关问题