日期:2014-05-18  浏览次数:20728 次

求一从复杂子查询中剔除重复数据的SQL语句
有一个剔除表a重复的语句(查询a)
select   *   from   表a   m   where  
not   exists  
(select   1   from   表a   where  
content=m.content   and   表a.id> m.id)

问题:被用来剔重的表是一个非常长而且复杂的子查询(查询b)

是不是我就只能把   查询b   放在   查询a   中那两个写了表a
的位置上
来形成一个更加复杂而长的查询?




------解决方案--------------------
1---
select * from (select ... from ta ) m where
not exists
(select 1 from (select ... from ta ) a where
a.content=m.content and a.id> m.id)

2--
select * into # from ta
select * from # m where
not exists
(select 1 from # a where
a.content=m.content and a.id> m.id)

drop table #
------解决方案--------------------
是不是我就只能把 查询b 放在 查询a 中那两个写了表a
的位置上
来形成一个更加复杂而长的查询?
==========这样做也可以,但建议楼主还是先把查询b放到一个临时表,再用临时表,代入到a表中的位置
------解决方案--------------------
建议楼主 把“一个非常长而且复杂的子查询(查询b)” 做成一个试图,然后在查询A 里面直接调用这个试图,当然你也可以直接把(查询b) 替换 查询A 里面的表a
如果算做存储过程的话,可以把(查询b)的查询结果 放到一个临时表 里面,这样效率会高一写
------解决方案--------------------
数据量不是特别大的情况下建议用临时表