求一从复杂子查询中剔除重复数据的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)的查询结果 放到一个临时表 里面,这样效率会高一写
[解决办法]
数据量不是特别大的情况下建议用临时表