Объединение всех в DB2 SQL Query обновляет порядок первой таблицы

Я действительно застрял в объединении UNION ALL, ниже senario

если я запустил этот запрос индивидуально, я получу результат ниже

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

оба выше приводят к строке, поэтому столбец имеет один и тот же тип. но когда я присоединяюсь к двум вышеуказанным запросам с объединением, я получаю что-то вроде

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, кто-нибудь знает или сталкивался с этой проблемой, если да, не могли бы вы рассказать немного о том, как решить это.

Заранее спасибо.

С уважением Мона


person SmartDev    schedule 20.06.2013    source источник


Ответы (1)


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
person Gordon Linoff    schedule 20.06.2013
comment
@монамона . . . Обратите внимание, что order by не является стабильным, потому что вы заказываете по seqno, а оно всегда имеет значение 4. Возможно, вам следует использовать другое поле, которое отличается в каждой строке, выбранной двумя запросами. - person Gordon Linoff; 20.06.2013
comment
... Я попробовал ваш запрос, и он сработал .. как шарм .. Большое вам спасибо, вы сэкономили мне еще несколько часов ... еще раз спасибо .. - person SmartDev; 20.06.2013