【问题标题】:mysql can't specify target table for update in FROM clausemysql 无法在 FROM 子句中指定更新的目标表
【发布时间】:2017-02-10 06:22:12
【问题描述】:

我必须检查一些不需要的记录并将其删除,因为我在下面的查询中使用过

delete from contain_tab 
where org_id = "RTY" 
      AND id_contain 
           NOT IN (
               select id_contain from(
                  SELECT id_contain FROM contain_tab c 
                  WHERE org_id = "RTY" 
                  AND (c.cu_date,c.cv_date) 
                  in(
                       select max(cu_date),max(cv_date) from contain_tab cs 
                       where org_id = "RTY" 
                       AND cs.container = c.container 
                       and cs.mfest_id = c.mfest_id 
                       and cs.sl_number = c.sl_number)
                     ) 
              as id_contain)

结构

CREATE TABLE `contain_tab` (
`id_contain` int(11) NOT NULL,
`org_id` varchar(5) NOT NULL,
`container` varchar(24) DEFAULT NULL,
`eta_dest` date DEFAULT NULL,
`mfest_id` varchar(30) DEFAULT NULL,
`sl_number` varchar(30) DEFAULT NULL,
`orig_id` varchar(8) DEFAULT NULL,
`cu_date` date DEFAULT NULL,
`cv_date` date DEFAULT NULL,
`vehicle` varchar(32) DEFAULT NULL,
`user_defined_field1` varchar(35) DEFAULT NULL,
`user_defined_field2` varchar(35) DEFAULT NULL
`created_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我有错误 MySQL 说:文档

1093 - 您不能在 FROM 子句中指定目标表 'contain' 进行更新

请帮我修复错误

【问题讨论】:

  • 对保留关键字使用反引号,例如contain
  • 你修改了实际上它在服务器的本地机器上工作它抛出的错误
  • 问题依然存在

标签: mysql


【解决方案1】:

给你的表名加反引号contain因为它是一个关键字

`contain`

【讨论】:

  • 你修改了实际上它在服务器的本地机器上工作它抛出的错误
  • 问题依然存在
  • @raj 你这行是什么意思(select id_contain from( SELECT id_contain
  • 目前没有包含在您的查询中,现在显示的错误是什么?
【解决方案2】:

尝试使用反引号,因为您的名称包含保留关键字。我冒昧地格式化了您的查询。

查看MySQL reserved keywords 并尽量避免它们出现在数据库/表/列的名称中。

delete from `contain_tab`
where `org_id` = "RTY"
      AND `id_contain`
          NOT IN (
            select `id_contain`
            from(
                  SELECT `id_contain`
                  FROM `contain_tab` c
                  WHERE `org_id` = "RTY"
                        AND (c.`cu_date`, c.`cv_date`)
                            in (
                              select max(`cu_date`), max(`cv_date`)
                              from `contain_tab` cs
                              where `org_id` = "RTY"
                                    AND cs.`container` = c.`container`
                                    and cs.`mfest_id` = c.`mfest_id`
                                    and cs.`sl_number` = c.`sl_number`
                            )
                ) as "id_contain"
          );

【讨论】:

  • #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 19 行的 '"id_contain" )' 附近使用正确的语法 在 id_contain #1093 中删除 " 后 - 您不能在 FROM 子句中指定目标表 'contain_tab' 进行更新
  • @raj 尝试删除最后一行 id_contain 的双引号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
  • 2013-01-17
  • 2014-07-19
  • 2020-09-12
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
相关资源
最近更新 更多