MySQL-当嵌套选择使用表时,如何从表中删除?
我正在尝试这样做:MySQL-当嵌套选择使用表时,如何从表中删除?,mysql,sql,Mysql,Sql,我正在尝试这样做: DELETE FROM table_1 WHERE table_1.id IN (SELECT table_1.id FROM table_1, table_2, table_3 WHERE table_1.id = table_2.table_1_id
DELETE FROM table_1
WHERE table_1.id IN (SELECT table_1.id
FROM table_1,
table_2,
table_3
WHERE table_1.id = table_2.table_1_id
AND table_2.id = table_3.table_2_id
AND table_3.id = 5)
似乎MySQL不会让我在嵌套的SELECT中有
表1
。建议?您可能会遇到以下错误:
ERROR 1093 (HY000): You can't specify target table 'table_1' for update in FROM clause.
您应该能够使用MySQL的多表语法来实现这一点:
DELETE table_1.*
FROM table_1,
table_2,
table_3
WHERE table_1.id = table_2.table_1_id
AND table_2.id = table_3.table_2_id
AND table_3.id = 5
DELETE table_1.*
FROM table_1
INNER JOIN table_2 on table_2.table_1_id = table_1.id
INNER JOIN table_3 on table_3.table_2_id = table_2.id
WHERE table_3.id = 5
上述查询应该可以工作,但作为一般规则,我建议改用ANSI JOIN语法:
DELETE table_1.*
FROM table_1,
table_2,
table_3
WHERE table_1.id = table_2.table_1_id
AND table_2.id = table_3.table_2_id
AND table_3.id = 5
DELETE table_1.*
FROM table_1
INNER JOIN table_2 on table_2.table_1_id = table_1.id
INNER JOIN table_3 on table_3.table_2_id = table_2.id
WHERE table_3.id = 5
我不知道为什么它不会。。。毕竟,它将在执行删除之前执行SELECT。你犯了什么错误?@Ike-是的,这就是我犯的错误。问题是我需要删除多条记录,而不仅仅是
id=
指定的1条记录。这就是我试图在中使用和嵌套select的原因。您可以使用multiple table delete语法删除多行。只需将嵌套的SELECT转换为DELETE。我刚刚从你的例子中复制了代码。如果示例不能代表您正在运行的实际查询,请更新它。很抱歉,嵌套的select将返回多个表_1.id。这就是我在
中使用的原因。这有帮助吗?其实没有:)如果您完成了问题中的示例查询,我将向您展示如何使用多表删除语法解决它。显示您正在运行的实际SQL(否“…”),我可以帮助您。@Ike-我根据您的请求修改了SQL。