ляво свързва две таблици с условие къде
Обикновено е грешно за да използвате LEFT [OUTER] JOIN
и след това филтрирайте с WHERE
условие, като по този начин анулира специалната характеристика на LEFT JOIN
за да включите безусловно всички редове от лявата таблица . Подробно обяснение:
- Обяснете по-подробно предложението JOIN спрямо LEFT JOIN и 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 минути
Изпълнението не би трябвало да е въобще не е проблем с правилните индекси. Нуждаете се от индекс (или PK) на time_table(rid)
и друг на record_table(date)
.