1

私はUNION ALLの参加に本当に行き詰まっています。以下はシナリオです

このクエリを個別に実行すると、結果を下回ります

1) Select salary as result from employee 
   where empno = '111628548' and seqno = 4   
   order by seqno Desc

result
------ 
$7000
$3000

2) Select descofemp as result from empdetail
   where empno = '111628548' and seqno = 4 
   order by seqno Desc

result
------
very good employee
good employee

上記の両方の結果は文字列になるため、列は同じタイプです。しかし、上記の2つのクエリをユニオンオールで結合すると、次のようなものが得られます

With s1 as (Select salary from employee 
   where empno = '111628548' and seqno = 4   
   order by seqno Desc),

s2 as (Select descofemp from empdetail
   where empno = '111628548' and seqno = 4 
   order by seqno Desc
)
select * from s1                                                    
Union ALL                                                           
select * from s2  

Result
------
$3000
$7000
very good employee
good employee

ここで給与の順序が変更されていることがわかります。さまざまなことを試しましたが、UNION ALLで順序が変更されている理由を理解できません。誰かがこの問題を知っているか、直面している場合は、どうすればよいかを教えてください。それを解決します。

前もって感謝します。

よろしくモナ

4

1 に答える 1

3

Union は、結果の順序を保証しません。ただし、注文情報を追加して使用することはできます。

With s1 as (Select salary as col, row_number() over (order by seqno desc) as seqnum
   from employee 
   where empno = '111628548' and seqno = 4   
  ),  
s2 as (Select descofemp as col , row_number() over (order by seqno desc) as seqnum
   from empdetail
   where empno = '111628548' and seqno = 4 
)
select col
from (select * from s1                                                    
      Union ALL                                                           
      select * from s2
     ) t
order by seqnum
于 2013-06-20T01:05:08.303 に答える