sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL:日付でソートされた3つのテーブルを結合する方法

    最良の方法は、他の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列があります 、bc およびdate
    • table2bがあります 、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
    


    1. COALESCE関数を使用して値をコンマで区切る

    2. 日付01-01-9999のオラクルの日付フィールドからミリ秒単位で時間を取得する方法

    3. テーブルから最大値で始まるOracleシーケンスを作成するにはどうすればよいですか?

    4. 未定義のクラス定数'MYSQL_ATTR_INIT_COMMAND'の未定義のクラス定数(PHP 5.5.3)