sql >> Database >  >> RDS >> PostgreSQL

Postgres Left Join met waar voorwaarde

links voeg twee tabellen samen met een waar-voorwaarde

Het is meestal fout om een ​​LEFT [OUTER] JOIN . te gebruiken en filter dan met een WHERE voorwaarde, waardoor de speciale functie van een LEFT JOIN . vervalt om alle rijen uit de linkertabel onvoorwaardelijk op te nemen . Gedetailleerde uitleg:

  • Leg JOIN vs. LEFT JOIN en WHERE prestatiesuggestie voor de conditie in meer detail uit

Zet voorwaarden die geacht worden alle rijen te filteren in de WHERE clausule (rid = 2 ), maar maak voorwaarden om links samen te voegen met rijen uit record_table daadwerkelijke deelnamevoorwaarden zijn:

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;

Zoals opgemerkt, is het logisch om kolommen op te nemen uit time_table in het resultaat, maar dat is mijn optionele toevoeging.

Je moet ook duidelijk zijn over onder- en bovengrenzen . De algemene conventie is om op te nemen de onderste en uitsluiten de bovengrens in de tijd (timestamp ) bereiken. Vandaar mijn gebruik van >= en < hierboven.

Gerelateerd:

  • SQL-query op een tijdreeks om het gemiddelde te berekenen
  • Een gemiddelde van records selecteren, gegroepeerd op perioden van 5 minuten

Prestaties zouden helemaal geen probleem moeten zijn met de juiste indexen.Je hebt een index (of PK) nodig op time_table(rid) en nog een op record_table(date) .



  1. IP-adres opslaan in MySQL-database met behulp van PHP

  2. Hoeveel RAM heeft uw nieuwe databaseserver nodig?

  3. Hoe EXCEPT werkt in SQL Server

  4. Kolommen selecteren en ordenen die niet in Groupy By SQL-instructie staan ​​- Oracle