Você quer fazer isso:
select * from
(
SELECT id, 2 as ordered FROM a -- returns 1,4,2,3
UNION
SELECT id, 1 as ordered FROM b -- returns 2,1
)
order by ordered
Atualizar
Percebi que mesmo tendo duas tabelas diferentes, você junta os IDs, ou seja, se você tiver
1 em ambas as tabelas, você está obtendo apenas uma ocorrência. Se esse for o comportamento desejado, você deve seguir UNION . Caso contrário, mude para UNION ALL . Então eu também noto que se você mudar para o código que eu propus, você começaria a receber tanto
1 e 2 (de ambos a e b ). Nesse caso, você pode querer alterar o código proposto para:select distinct id from
(
SELECT id, 2 as ordered FROM a -- returns 1,4,2,3
UNION
SELECT id, 1 as ordered FROM b -- returns 2,1
)
order by ordered