【发布时间】:2015-05-11 20:34:20
【问题描述】:
我已经读到,操作的任何顺序都是在查询结束时完成的,因此之前不能在结果中强制排序。
所以我想要实现的是通过使用分配行号的变量和使用从句我只选择第一行来从重复的结果中获取一条记录。
对不起,我的解释不好,我希望你看看我的意思:
select *
from address left join
(select address.add_nr as add_nr, acc.typ as typ, acc.seq as seq,
@num := if(@add_nr = address.add_nr, @num + 1, 1) as row_number,
@add_nr := address.add_nr as dummy
from
address left join
(
select con_add_nr as add_nr, 'XY' as typ, 1 as seq
from conctract,conctractdet
where con_pol_kz IN('L')
and con_nr=vrs_con_nr
and cond_spa_nr IN (102,160,173)
group by 1,2,3
union
select ris_add_nr as add_nr, 'XX' as typ, 4 as seq
from conctract,conctractdet,risaddress
where con_pol_kz IN('P','PU','A')
and con_nr=vrs_con_nr
and cond_spa_nr IN (102,160,173)
and con_nr=ris_con_nr
and ris_art='VP'
group by 1,2,3
union
select ris_add_nr as add_nr, 'YY' as typ, 3 as seq
from conctract,conctractdet,risaddress
where con_pol_kz IN('P','PU','A')
and con_nr=vrs_con_nr
and cond_spa_nr IN (102,160,173)
and vrs_nr=ris_vrs_nr
and ris_art='VP'
group by 1,2,3
union
select ris_add_nr as add_nr, 'YX' as typ, 5 as seq
from conctract,conctractdet,risaddress
where con_pol_kz IN('P','PU','A')
and con_nr=vrs_con_nr
and cond_spa_nr IN (102,160,173)
and con_nr=ris_con_nr
and ris_art='2. VN'
group by 1,2,3
union
select ris_add_nr as add_nr, 'X' as typ, 2 as seq
from conctract,conctractdet,risaddress
where con_pol_kz IN('P','PU','A')
and con_nr=vrs_con_nr
and cond_spa_nr IN (102,160,173)
and vrs_nr=ris_vrs_nr
and ris_art='2. VN'
group by 1,2,3
order by add_nr,seq asc) as acc on acc.add_nr=address.add_nr
having row_number=1) as acc on address.add_nr=acc.add_nr;
所以问题是,当 row_number 已经被假定时,操作的顺序是在最后完成的。我需要的是首先按序列号“seq”对结果进行排序,实现第一个条目获取row_number = 1。目前“未排序”结果中的第一个条目获得 row_number=1,这不是我需要的。
【问题讨论】:
-
请改写为
JOIN...ON。
标签: mysql variables sql-order-by mariadb temp-tables