Най-добрият начин е да създадете нова таблица, съдържаща общите полета от другите три таблици и да добавите индекс към общото поле за дата. Оригиналните три таблици трябва да съдържат външен ключ, свързващ общата таблица. С този дизайн заявката става проста:
SELECT *
FROM common_table
ORDER BY "date" DESC
LIMIT 100
Ако се нуждаете и от данни от по-конкретните таблици, можете да използвате LEFT JOIN, за да изберете и тези данни в същата заявка.
Ако не можете да промените дизайна си и производителността не е проблем, тогава можете да използвате UNION ALL, за да комбинирате резултатите от трите таблици преди сортиране:
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
ORDER BY "date" DESC
LIMIT 100
Имайте предвид, че горното ще работи само ако всички таблици имат една и съща структура. Ако имате полета, които се срещат в една таблица, но не и в други, тогава трябва да ги пропуснете от SELECT или иначе да върнете NULL за тази колона в другите таблици. Например ако:
table1
има колониa
,b
,c
иdate
.table2
има колониb
,c
иdate
.table3
има колониa
,c
иdate
.
След това използвайте това:
SELECT a, b, c, "date"
FROM table1
UNION ALL
SELECT NULL AS a, b, c, "date"
FROM table2
UNION ALL
SELECT a, NULL as b, c, "date"
FROM table3
ORDER BY "date" DESC
LIMIT 100