Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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 为什么删除查询不起作用(错误1093(HY000))?_Mysql - Fatal编程技术网

Mysql 为什么删除查询不起作用(错误1093(HY000))?

Mysql 为什么删除查询不起作用(错误1093(HY000))?,mysql,Mysql,这是到目前为止我应该尝试的查询: 我认为从逻辑上讲,应该不会有问题,因为select查询将给我一个ID列表,我将根据该列表删除这些ID 这是我得到的错误: ERROR 1093 (HY000): You can't specify target table 'food_detail' for update in FROM clause 必须在另一个查询中扭曲子查询,如下所示: DELETE FROM food_detail WHERE food_id IN ( SELECT * FROM

这是到目前为止我应该尝试的查询:

我认为从逻辑上讲,应该不会有问题,因为select查询将给我一个ID列表,我将根据该列表删除这些ID

这是我得到的错误:

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

必须在另一个查询中扭曲子查询,如下所示:

DELETE FROM food_detail 
WHERE food_id IN (
  SELECT * FROM (
    SELECT DISTINCT food_id FROM food_detail
  ) AS t
);

Mysql不允许在内部查询中引用同一个表。

必须在另一个查询中扭曲子查询,如下所示:

DELETE FROM food_detail 
WHERE food_id IN (
  SELECT * FROM (
    SELECT DISTINCT food_id FROM food_detail
  ) AS t
);

Mysql不允许您在内部查询中引用同一个表。

您想做什么

您的查询将删除表中所有非空的食物id

我怀疑你想删除所有只出现一次的食物id。如果是,请将删除与联接一起使用:

您也可以对原始查询使用相同的方法:

DELETE fd
    FROM food_detail fd JOIN
         (select distinct food_id
          from food_detail fd1
         )
         on fd.food_id = fd1.food_id;
但这似乎是一种笨拙的说法:

DELETE food_detail
    WHERE food_id is not null;

你想干什么

您的查询将删除表中所有非空的食物id

我怀疑你想删除所有只出现一次的食物id。如果是,请将删除与联接一起使用:

您也可以对原始查询使用相同的方法:

DELETE fd
    FROM food_detail fd JOIN
         (select distinct food_id
          from food_detail fd1
         )
         on fd.food_id = fd1.food_id;
但这似乎是一种笨拙的说法:

DELETE food_detail
    WHERE food_id is not null;

你不是在删除表中的所有内容吗?为什么需要子查询?Truncate在我的表上不起作用。这是最好的方法,但是为什么需要子查询呢?为什么不直接从食物细节中删除呢?我该怎么做?只需一个查询?从食物中删除?详细信息将清空表格。您不是在删除表格中的所有内容吗?为什么需要子查询?Truncate在我的表上不起作用。这是最好的方法,但是为什么需要子查询呢?为什么不直接从食物细节中删除呢?我该怎么做?只需一个查询?DELETE FROM food_detail将清空该表。在SELECT子句中已经为HAVING子句指定了别名的情况下,为什么还要在HAVING子句中重复COUNT*?它应该具有cnt=1。@Barmar。因为我不记得哪些数据库在having子句中允许别名,哪些不允许。好的,那么我会用另一种方式问:如果不使用,为什么要在SELECT子句中添加COUNT*AS cnt?@Barmar。诚实的理由是,当我开始编写查询时,我知道需要对count*进行过滤。我不知道我是要把它放在having子句还是on子句中,这两个子句在功能上是等价的。既然你已经在SELECT子句中给having子句加了一个别名,为什么还要在having子句中重复COUNT*?它应该具有cnt=1。@Barmar。因为我不记得哪些数据库在having子句中允许别名,哪些不允许。好的,那么我会用另一种方式问:如果不使用,为什么要在SELECT子句中添加COUNT*AS cnt?@Barmar。诚实的理由是,当我开始编写查询时,我知道需要对count*进行过滤。我不知道我是要把它放在having子句还是on子句中,两者在功能上是等价的。