最良の方法は、他の3つのテーブルの共通フィールドを含む新しいテーブルを作成し、共通の日付フィールドにインデックスを追加することです。元の3つのテーブルには、共通テーブルにリンクする外部キーが含まれている必要があります。この設計により、クエリは単純になります。
SELECT *
FROM common_table
ORDER BY "date" DESC
LIMIT 100
より具体的なテーブルのデータも必要な場合は、LEFT JOINを使用して、同じクエリでそのデータを選択することもできます。
デザインを変更できず、パフォーマンスが問題にならない場合は、UNION ALLを使用して、並べ替える前に3つのテーブルすべての結果を組み合わせることができます。
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
ORDER BY "date" DESC
LIMIT 100
上記は、すべてのテーブルが同じ構造を持っている場合にのみ機能することに注意してください。 1つのテーブルに存在するが他のテーブルには存在しないフィールドがある場合は、それらを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