2017-02-10 68 views
0

我要检查一些不需要的记录,并删除它,下面的查询MySQL不能指定目标表更新在FROM子句

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子句中更新

请帮我修正这个错误

+0

储备关键字使用反引号,比如'contain' –

+0

请检查该http://stackoverflow.com/questions/45494/mysql-error-1093-cant-specify-target-table-for-update-in -from-clause – Ninja

+0

Ya修改其实它在本地机器上工作在服务器上它抛出的错误 – raj

回答

0

您的tablename contain给反引号,因为它是一个关键字

`contain` 
+0

Ya修改其实它在本地机器上工作在服务器上它抛出的错误 – raj

+0

问题依然存在 – raj

+0

@raj这是什么意思'(select select id_contain from(SELECT id_contain' – affaz

0

使用反引号作为你的名字包括保留关键字尝试。我冒着格式化您的查询的自由。

看看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" 
     ); 
+0

#1064 - 您的SQL语法错误;请检查与您的MySQL服务器版本对应的手册,以便在第19行的''id_contain')'处使用正确的语法。删除“in id_contain#1093 - 在FROM子句 – raj

+0

中无法指定目标表'contain_tab' @raj尝试在最后一行中删除“id_contain”的双引号 – affaz

相关问题