sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres Venstre Sammenføj med hvor tilstand

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



  1. Tjek, om en tabel har en fremmednøgle i SQL Server med OBJECTPROPERTY()

  2. Generer DDL programmatisk på Postgresql

  3. Sådan opretter du bruger i Oracle Multitenant 12c uden C## præfiks

  4. Hvad er forskellen mellem varchar og nvarchar?