vlevo spojí dvě tabulky s podmínkou kde
Obvykle je špatně použít LEFT [OUTER] JOIN
a poté filtrovat pomocí WHERE
podmínku, čímž zrušíte speciální funkci LEFT JOIN
zahrnout všechny řádky z levé tabulky bezpodmínečně . Podrobné vysvětlení:
- Podrobněji vysvětlete návrh výkonu JOIN vs. LEFT JOIN a WHERE condition
Do WHERE
vložte podmínky, které mají filtrovat všechny řádky klauzule (rid = 2
), ale vytvořte podmínky pro řádky s levým spojením z record_table
jsou skutečné podmínky připojení:
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;
Jak bylo uvedeno, má smysl zahrnout sloupce z time_table
ve výsledku, ale to je můj volitelný doplněk.
Musíte si také ujasnit dolní a horní hranice . Obecnou konvencí je zahrnout nižší a vyloučit horní mez v čase (timestamp
) se pohybuje. Proto používám >=
a <
výše.
Související:
- Dotaz SQL na časovou řadu pro výpočet průměru
- Výběr průměru záznamů seskupených podle 5minutových období
Výkon by neměl být vůbec žádný problém se správnými indexy. Potřebujete index (nebo PK) na time_table(rid)
a další na record_table(date)
.