PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgres Left Join с условието къде

ляво свързва две таблици с условие къде

Обикновено е грешно за да използвате 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) .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създайте централна таблица с PostgreSQL

  2. PostgreSQL:Как да задам search_path на потребителско ниво?

  3. Rails автоматично присвояване на идентификатор, който вече съществува

  4. SQL заявка за получаване на всички стойности, които едно изброяване може да има

  5. Внедряване на настройка с множество центрове за данни за PostgreSQL – част първа