venstre sammenføj to tabeller med en where-tilstand
Det er typisk forkert for at bruge en LEFT [OUTER] JOIN og filtrer derefter med en WHERE betingelse, hvorved den særlige funktion ved en LEFT JOIN annulleres at inkludere alle rækker fra venstre tabel ubetinget . Detaljeret forklaring:
- Forklar JOIN vs. LEFT JOIN og forslag til HVOR-tilstand mere detaljeret
Indsæt betingelser, der skal filtrere alle rækker i WHERE klausul (rid = 2 ), men lav betingelser for at venstre-sammenføje rækker fra record_table ud til at være faktiske tilslutningsbetingelser:
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 nævnt giver det mening at inkludere kolonner fra time_table i resultatet, men det er min valgfri tilføjelse.
Du skal også være klar over nedre og øvre grænser . Den generelle konvention er at inkludere den nederste og ekskluder den øvre grænse i tid (timestamp ) områder. Derfor min brug af >= og < ovenfor.
Relateret:
- SQL-forespørgsel på en tidsserie for at beregne gennemsnittet
- Valg af et gennemsnit af poster grupperet efter 5 minutters perioder
Ydeevne bør intet problem overhovedet med de rigtige indekser. Du skal bruge et indeks (eller PK) på time_table(rid) og en anden på record_table(date) .