如何使用子查询中删除/更新查询在MySQL
我使用的是MySQL 5.0.77数据库使用查询:如何使用子查询中删除/更新查询在MySQL
Delete from IPADDRESS
where visitdate Not in (SELECT max(visitdate) FROM IPADDRESS WHERE USERNAME='MGSH0002')
and USERNAME='MGSH0002'
执行时,我收到此错误:
你可以从子句中指定目标表IPADDRESS用于更新
不能,不幸的是,MySql不允许这样做。
当前,您无法更新表并从 中的同一表中选择子查询。
来源:
thanku 4 ur ans但是有没有其他方法可以做同样的工作 – manorma 2012-03-28 12:39:55
当然不是最好的解决办法,但对于你的问题,这将这样的伎俩:
delete i1 from
IPADDRESS i1,
IPADDRESS i2
where
i1.username = i2.username
and i1.username = 'MGSH0002'
and i1.visitdate < i2.visitdate
的替代性和更聪明的解决方案是下面的语句:
delete i1 from
IPADDRESS i1,
(select max(visitdate) visitdate from IPADDRESS where username = 'MGSH0002') temp
where
i1.username = 'MGSH0002'
and i1.visitdate < temp.visitdate
thnks这是工作我有一个更多的查询“删除从IPADDRESS where visitdate不在(SELECT visitdate FROM(SELECT visitdate FROM IPADDRESS WHERE USERNAME ='MGSH0002 'ORDER BY visitdate DESC)其中ROWNUM manorma 2012-03-28 13:01:00
第二种解决方案当然要聪明得多。它可能需要'group by username'成为'temp'子查询中的WHERE username ='MGSH0002'',但它比第一个好。并且如果有'(用户名,访问日期)的索引,则速度更快' – 2012-03-29 06:45:02
Thx ypercube!我想编辑我的第二个解决方案,现在我们有了一个聪明的解决方案。 – GreenTurtle 2012-03-29 11:31:46
为什么这是用java标签?移动到mysql – Jayan 2012-03-28 12:30:11