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

Kombinerer 2 SELECT-forespørgsler

Som det ser ud, vil du oprette et output, der viser de 5 sporvogne, der går fra en station til City Square og 5 sporvogne, der går fra City Square til en anden station. I dette tilfælde - du laver ingen forbindelse (for eksempel til tiden) mellem disse to ting - skal du slutte dig til en pseudo-kolonne, row_number() OVER () kommer til at tænke på:

SELECT '$name' AS name1, w1.time1, 'City Square - arrival' AS name2, w1.time2,
       'City Square - departure' AS name3, w2.time3, '$name2' AS name4, w2.time4
FROM (
  SELECT dt1.time AS time1, dt2.time AS time2, row_number() OVER () AS rn
  FROM departure_times AS dt1
  JOIN departure_times AS dt2 USING (tram_id)
  WHERE dt1.name = '$name' AND dt2.name = 'CitySquare'
  LIMIT 5) w1
JOIN (
  SELECT dt1.time AS time3, dt2.time AS time4, row_number() OVER () AS rn
  FROM departure_times AS dt1
  JOIN departure_times AS dt2 USING (tram_id)
  WHERE dt1.name = 'CitySquare' AND dt2.name = '$name2'
  LIMIT 5) w2 USING (rn);

I hver af underforespørgslerne vælger du de fem rækker af interesse. Da der ikke er nogen synlig egenskab, kan du JOIN disse to sæt rækker på, skal du oprette en eller anden pseudo-kolonne, der kan tjene det formål (du har brug for noget at deltage på, ellers får du en CROSS JOIN resulterer i 5 x 5 rækker i outputtet). Brug af row_number() OVER () AS rn gør netop det:den opretter en ny kolonne med alias rn som indeholder rækkenummeret over hele rækkesættet (OVER () , 5 rækker på grund af LIMIT klausul). Du gør dette i begge underforespørgsler, så du kan bruge det som join-betingelsen:USING (rn) . Du behøver ikke bruge denne kolonne i outputtet.

Du har ingen kontrol over, hvilke 5 sporvognstider der vil blive opført. Hvis du ønsker det, bør du gøre noget som WHERE dt1 > CURRENT_TIME og ORDER BY dt1 i begge underforespørgsler eller noget i den retning.



  1. Hvordan erklærer og bruger jeg variabler i PL/SQL, som jeg gør i T-SQL?

  2. Hvordan bruger man LOAD_FILE til at indlæse en fil i en MySQL-blob?

  3. Vælg forespørgslens rækkefølge fungerer ikke i forberedt erklæring

  4. PHP- og MYSQL-databaseforbindelse og tabeloprettelse kun én gang