vänster sammanfoga två tabeller med ett where-villkor
Det är vanligtvis fel för att använda en LEFT [OUTER] JOIN och filtrera sedan med en WHERE skick, vilket gör att specialfunktionen för en LEFT JOIN ogiltigförklaras för att inkludera alla rader från den vänstra tabellen villkorslöst . Detaljerad förklaring:
- Förklara JOIN vs. LEFT JOIN och WHERE-förslag till prestanda mer detaljerat
Sätt villkor som ska filtrera alla rader i WHERE klausul (rid = 2 ), men gör villkor för att vänsterkoppla rader från record_table ut att vara faktiska anslutningsvillkor:
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;
Som kommenterat är det vettigt att inkludera kolumner från time_table i resultatet, men det är mitt valfria tillägg.
Du måste också vara tydlig med undre och övre gränser . Den allmänna konventionen är att inkludera den lägre och uteslut den övre gränsen i tid (timestamp ) intervall. Därav min användning av >= och < ovan.
Relaterat:
- SQL-fråga på en tidsserie för att beräkna genomsnittet
- Välja ett genomsnitt av poster grupperade efter 5-minutersperioder
Prestanda borde vara inga problem alls med rätt index. Du behöver ett index (eller PK) på time_table(rid) och en annan på record_table(date) .