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)
にあります 。