Cara terbaik adalah membuat tabel baru yang berisi bidang umum dari tiga tabel lainnya dan menambahkan indeks pada bidang tanggal umum. Tiga tabel asli harus berisi kunci asing yang menghubungkan ke tabel umum. Dengan desain ini query menjadi sederhana:
SELECT *
FROM common_table
ORDER BY "date" DESC
LIMIT 100
Jika Anda juga memerlukan data dari tabel yang lebih spesifik, Anda dapat menggunakan LEFT JOINs untuk juga memilih data tersebut dalam kueri yang sama.
Jika Anda tidak dapat mengubah desain dan kinerja tidak menjadi masalah, maka Anda dapat menggunakan UNION ALL untuk menggabungkan hasil dari ketiga tabel sebelum menyortir:
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
ORDER BY "date" DESC
LIMIT 100
Perhatikan bahwa di atas hanya akan berfungsi jika semua tabel memiliki struktur yang sama. Jika Anda memiliki bidang yang muncul di satu tabel tetapi tidak di tabel lain, maka Anda harus menghilangkannya dari SELECT atau mengembalikan NULL untuk kolom itu di tabel lain. Misalnya jika:
table1
memiliki koloma
,b
,c
dandate
.table2
memiliki kolomb
,c
dandate
.table3
memiliki koloma
,c
dandate
.
Kemudian gunakan ini:
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