MySQL错误您无法在FROM子句

时间:2015-06-29 05:24:05

标签: mysql subquery sql-delete

我的数据库中有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 个答案:

答案 0 :(得分: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;

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

答案 1 :(得分:1)

更多关注"安全方面"您应该指定要删除的表格(此处:别名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版本做同样的事情。