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

PostgresLeftはwhere条件で結合します

    where条件で2つのテーブルを左結合

    通常は間違っています LEFT [OUTER] JOINを使用するには 次に、WHEREでフィルタリングします これにより、LEFT JOINの特別な機能が無効になります。 左側のテーブルのすべての行を無条件に含める 。詳細な説明:

    • JOINとLEFTJOIN、およびWHERE条件のパフォーマンスの提案について詳しく説明します

    すべての行をフィルタリングすることになっている条件をWHEREに入れます 句(rid = 2 )、ただし、record_tableから行を左結合する条件を作成します 実際の参加条件になります:

    SELECT t.start_date, t.end_date  -- adding those
         , r.id, r.name, r.date 
    FROM   time_table t
    LEFT   JOIN record_table r ON r.date >= t.start_date
                              AND r.date <  t.end_date
    WHERE  t.rid = 2;
    

    コメントしたように、time_tableの列を含めることは理にかなっています 結果になりますが、それは私のオプションの追加です。

    また、下限と上限についても明確にする必要があります 。一般的な規則は、含めることです。 下部と除外 時間の上限(timestamp )範囲。したがって、>=を使用します および< 上記。

    関連:

    • 平均を計算するための時系列のSQLクエリ
    • 5分間でグループ化されたレコードの平均を選択する

    パフォーマンスはまったく問題ありません time_table(rid)にインデックス(またはPK)が必要です。 もう1つはrecord_table(date)にあります 。



    1. 高可用性のためにMariaDBクラスターをデプロイする方法

    2. Oracleでフィールドの値が変更されたときに行番号をインクリメントする

    3. PL / SQLパッケージ、プロシージャ、または関数が使用されているかどうかをどのように判断できますか?

    4. Oracle:UPSERTの方法(更新するか、テーブルに挿入しますか?)