Я думаю, что вы хотите:
select id, name, date, rating
from (
select id, name, date, rating, 't1' which from table1
union all
select id, name, date, rating, 't2' which from table2
)
order by
case when which = 't1' then date end desc,
rating end desc
Подзапрос использует union all
для выбора из обеих таблиц с дополнительным столбцом, который указывает, из какой таблицы происходит каждая запись. Затем внешний запрос выполняет условную сортировку:
выражение case
возвращает date
от t1
, иначе null
; следовательно, сортировка по убыванию ставит t1 rows first, ordered by descending dates (rows from
t2 get
null`, что в порядке убывания занимает последнее место)
второй критерий сортировки сортирует оставшиеся строки (ie из t2 by descending
рейтинг`
В MySQL это можно немного сократить:
(
select id, name, date, rating, 't1' which from table1
union all
select id, name, date, rating, 't2' which from table2
)
order by
case when which = 't1' then date end desc,
rating end desc