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