我的数据库中有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
如何解决此问题?
答案 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
版本做同样的事情。