当前位置: 首页 > 面试题库 >

MySQL-当嵌套选择使用该表时如何从表中删除?

景河
2023-03-14
问题内容

我正在尝试做这样的事情:

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不允许我table_1嵌套SELECT中使用。有什么建议吗?


问题答案:

您可能会收到此错误:

ERROR 1093 (HY000): You can't specify target table 'table_1' for update in FROM clause.

您应该能够使用MySQL的多表DELETE语法来做到这一点:

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

上面的查询应该可以工作,但是作为一般规则,我建议使用ANSI JOIN语法代替:

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


 类似资料:
  • 问题内容: 我想知道如何从具有类型列的表中进行选择语句?该列的类型定义为: UPD1 表定义为 如果我选择此列, 我将得到以下无意义的结果: 我只想打开这种类型。 问题答案: 像这样尝试: 这是一个sqlfiddle演示

  • 问题内容: 我创建了一个客户c#DropDownList控件,可以将其内容呈现为optgroup(不是从头开始,我编辑了一些在Internet上找到的代码,尽管我确切地了解了它的作用),并且工作正常。 但是,我现在遇到一种情况,我需要在下拉菜单中有两个缩进级别,即 但是,在上面的示例代码段中,它呈现的缩进量与相同。 有没有一种方法可以产生我想要的嵌套optgroup行为? 问题答案: 好的,如果有

  • 问题内容: 此代码不适用于MySQL 5.0,如何重写使其正常工作 我想删除没有唯一ID的列。我会在大多数情况下添加唯一的一个ID(我尝试了in语法,它也不起作用)。 问题答案: (子)查询返回结果 集 。因此,您需要使用,而不是在子句中使用。 此外,如该答案所示,您不能在同一查询中的子查询中修改同一表。但是,您可以然后在单独的查询中进行嵌套,也可以嵌套另一个子查询并为内部子查询结果添加别名(尽管

  • 假设我们有一个三维的物体列表。 假设我想过滤“l5”,这样如果最里面的列表中的任何元素是奇数,那么整个列表都应该被删除,如果这使得第二级列表为空,那么作为回报应该被删除。 因此,对于给定的示例,在过滤之前,如果: 过滤后,它应该是: 如何使用Java中的流来实现这一点?

  • 问题内容: 我有以下表名称模板,例如,一对夫妇,名字和数字相同:fmj.backup_semaforo_geo_THENUMBER,例如: 可以说我需要从每个表中选择一列,该表以’fmj.backup_semaforo_geo_%’过滤器成功执行,我尝试这样做: 但是我正在获取all_tables表名称数据: 我如何在不获取all_tables输出的情况下实现这一目标? 谢谢。 问题答案: 大概您

  • 问题内容: 我正在努力 但是,如果其中一个表为空,它将不返回任何内容。我如何使它返回“ a”,即使另一个为空? 问题答案: 在子句中使用两个表在功能上等效于: 这将为B中的每一行返回A行。当B为空时,结果也为空。您可以使用来解决此问题。使用,即使其中一个表为空,也可以返回行。例如: 由于该条件始终为真,因此这就像一个条件,除了它也适用于空表。