2015-09-15 63 views
0

任何人都可以使用此查询来帮助我查询中出现什么问题。在mysql中使用select和case语句进行更新

查询

update vcd_deals 
set del_date='2015-09-17' 
where case 
     when (
       (select count(del_id) 
       from vcd_deals 
       where del_date=curdate()+1 
       and del_superSaver_deal=1)=0) then 1 
     else 0 
    end 
order by del_date asc limit 3 

我收到以下错误:

错误

You can't specify target table 'vcd_deals' for update in FROM clause.

其实我想更新vcd_deals表的前三行 (select count(del_id) from vcd_deals where del_date=curdate()+1 and del_superSaver_deal=1)=0只有当。

请建议是否有任何其他方式来做到这一点。 感谢

回答

1

即与MySQL分析器的问题。您可以尝试使用Inner Join

否则,你可以附上你的子查询到一个单独的表像如下:(未测试)

update vcd_deals 
set del_date='2015-09-17' 
where 0 = (select Del_id_count 
      from (select count(del_id) as Del_id_count 
        from vcd_deals 
        where del_date=curdate()+1 
        and del_superSaver_deal=1) temp 
        ) 
order by del_date asc limit 3 
+0

它的工作感谢兄弟,我有一个问题,你为什么使用两个次选择查找'Del_id_count' – Aabid

+0

这是派生表,它有助于提高性能。查看链接[Link1](http://www.databasejournal.com/features/mysql/article.php/3914401/Use-Derived-Tables-in-Your-MySQL-Queries-to-Improve-Database-Performance。 htm),[Link2](http://forums.devshed.com/mysql-help-4/subquery-vs-derived-table-944181.html)以获取更多详细信息 – Crazy2crack

+0

Hello @ Crazy2crack您可以在另一个查询中帮助我吗? 。我想用这个查询更新两个表列。 – Aabid

0

您可以尝试按照如下─

UPDATE vcd_deals 
SET del_date='2015-09-17' 
WHERE del_date<>ADDDATE(CURDATE(), INTERVAL 1 DAY) 
AND del_superSaver_deal<>1 
ORDER BY del_date LIMIT 3; 
+0

但我想更新从vcd_deals只有当'SELECT COUNT(del_id),其中del_date = CURDATE()+ 1和del_superSaver_deal = 1'这个查询返回0 – Aabid

+0

是的,意味着你想排除满足给定条件的行...更新查询是不是做同样的... –