Union ile birleştirdiğiniz sorgularda order kullanamazsınız. Örneğin aşağıdaki gibi bir sorgu hata verecektir:
select name from T1 where order by insert_date
union
select name from T2 where order by insert_date
MySQL de "Error Code: 1221. Incorrect usage of UNION and ORDER BY", SQL Server'da "Msg 156, Level 15, State 1, Line 5 Incorrect syntax near the keyword 'ORDER'" şeklinde bir hata alabilirsiniz.
Bu sıkıntıyı çözmek için sıralamayı aşağıdaki gibi yapabilirsiniz (MySQL kullandık örnek için) :
select * from (
select * from T1
union
select * from T2
) as A
order by insert_date
İki parça da kendi içinde sıralansın, o şekilde birleştirilsin isteyebilirsiniz. Örneğin aynı tablo içinde önce A ile başlayanlar gelsin ve bunlar insert_date göre sıralansın, sonra A ile başlamayanlar gelsin ve onlarda kendi aralarında insert_date'e göre sıralansın istiyorsanız yukarıdaki gibi bir yapıyı kullanamazsınız. Yukarıdaki yapı tüm sonucu tarihe göre sıralar ve ilk ve ikinci sorgu sonucu birbirine karışır. Bunu engellemek için aşağıdaki gibi yapabilirsiniz:
select * from (
select *, 1 as sira from T1 where name like 'A%'
union
select *, 2 as sira from T1 where name not like 'A%'
) as A
order by sira,insert_date;
Yukarıdaki sorguda önce A ile başlayanlar için sira sütun değeri olarak 1 verildi, diğer grup içinde 2 değeri verildi. Sıralamayı önce "sira" sütununa göre yapıldığı için sıralama sizin istediğiniz gibi olacaktır.