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)
.