关于两表关联的update及delete的问题 有一个表T如下 字段A 字段B a 1 b 2 c 3 a 5 d 6 c 1
需要删除符合如下条件的数据,请问有什么好sql么 条件为 select * from T t1,T t2 where t1.A=t2.A and t1.B<>t2.B 整表将近4000万条数据,我使用的SQL delete from T where exists(select 1 from T t1,T t2 where t1.A=t2.A and t1.B<>t2.B) ,半天都没反应。。。请教该如何写SQL能够节省运行时间
[其他解释] 谢谢2楼回答,不过还是看不太懂。。。。为什么没有delete语句 [其他解释] to 3楼,我已经将需要更新的数据插入临时表,并且已经更新好了,问题是怎么删除原表中的那些需要更新的数据呢 [其他解释] 第一个 DELETE FORM T aa WHERE aa.A in(SELECT A FORM T GROUP BY A HAVING COUNT(A)>1) [其他解释] to 6楼,需要删除的数据有66万多,这样的语句是否意味着在4000万的记录中找66万条记录来删除呢 [其他解释] 关注 [其他解释] 各位大哥不要睡觉啊,跪求啊 [其他解释]
delete from T where exists(select 1 from T t1,T t2 where t1.A=t2.A and t1.B <>t2.B) 这个exist是有错误的。没有T表和后面的子查询的关联。所以这里就等效delete from T;这个语句,就就是全删除
通过楼主的sql没有看的太懂,你的目的是怎样的呀。
[其他解释] 有一个表T如下 字段A 字段B a 1 b 2 c 3 a 5 d 6 c 1
需要删除符合如下条件的数据,请问有什么好sql么 条件为 select * from T t1,T t2 where t1.A=t2.A and t1.B <>t2.B
我的意思上面。。。。 [其他解释]
delete from T t2 where exists(select 1 from T t1 where t1.A=t2.A and t1.B <>t2.B)
[其他解释] 楼上的啥意思啊 [其他解释] 1,删除 根据楼主所述, 字段A 字段B a 1 b 2 c 3 a 5 d 6 c 1
这样的数据,是不是应该最终是得到以下结果? 字段A 字段B b 2 d 6 则SQL应该是这样的: delete from T t2 where exists(select 1 from T t1 where t1.A=t2.A and t1.B <>t2.B);
跟楼上的一样 [其他解释] 2,更新
没看懂到底要得到什么样的逻辑.. [其他解释] 学习看看,路过一下! [其他解释] 用 rowid 更快 create table del_rowid as select t.rowid rid from T t1 where t1.A=t2.A and t1.B <>t1.B;
create index idx_del_rowid on del_rowid(rowid);
delete/*+ordered use_nl(del_rowid t)*/ t where t.rowid in (select rid from del_rowid )
第二个方法,要加上个 hint吧? 我见过的写法,是这样: update /*+ BYPASS_UJVC*/(select t.b tb,x.d xd from t,x where t.a=x.c) set tb=xd; [其他解释] 1、要评估一下数据量,大体确认一下删除的数据量有多大,才能确定最优的删除方法 2、update (select t.b tb,x.d xd from t,x where t.a=x.c) set tb=xd; 在有主键或唯一索引的情况下,这个方法最快。