请高手帮忙优化一下我的SQL语句,谢谢!

[复制链接]
查看11 | 回复3 | 2013-2-13 21:07:58 | 显示全部楼层 |阅读模式
之前未能正确理解楼主提问的意图,现在清楚了。 要得到楼主要求的删除文件列表,我们很自然就会想到求两表交集和非交集的方法(in,not in 或exists,not exists),但是这种方法需要实施两表之间多次比较。首先要求出动态表与part表photo的交集但是id无交集的记录,再拿这个记录集重新与动态表比较删除photo有交集但是id无交集的记录,最后还要加上动态表中与part表photo无交集的那些记录,才能得到最终结果,期间最少要对动态SQL查询表实施3次求(交集或非交集)操作显然效率很成问题。特别是not in在大数据表的情况下有无索引都会导致效率悲剧! 下面换一种角度予以解决,相信效率更高。**不好意思之前的代码使用的子查...
回复

使用道具 举报

千问 | 2013-2-13 21:07:58 | 显示全部楼层
在没有正确理解房东的意图的问题,这是现在很清楚。要删除的文件列表,业主需要,我们自然会想到寻求交集的两个表和不相交的方法(不中,或存在,不存在的),但这种方法这两个表之间需要实现多重比较。首先需要一个动态表,表的部分照片,但记录的id不相交的交点,夺回重新相比,动态表格中删除相交照片的身份证件不相交的记录,最后一部分表加上动态表照片不相交的那些记...
回复

使用道具 举报

千问 | 2013-2-13 21:07:58 | 显示全部楼层
delete from 表 where exists ( select photo from (SELECT id,photo FROM t1 group by photohaving count(*)>2 ) a where a.photo=表.photo )这样???看你的介绍不就是大于2的使用者就可以删除么....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行