Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-当嵌套选择使用表时,如何从表中删除?_Mysql_Sql - Fatal编程技术网

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。