sql >> Databasteknik >  >> RDS >> PostgreSQL

Kombinera 2 SELECT-frågor

Utifrån det så vill du skapa en utgång som listar de 5 spårvagnarna som går från en station till City Square och 5 spårvagnar som går från City Square till någon annan station. I det här fallet - du gör ingen koppling (till exempel i tid) mellan dessa två saker - bör du gå med på en pseudo-kolumn, row_number() OVER () kommer att tänka 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 var och en av underfrågorna väljer du de fem raderna av intresse. Eftersom det inte finns någon synlig egenskap kan du JOIN dessa två uppsättningar av rader på, måste du skapa någon pseudo-kolumn som kan tjäna det syftet (du behöver något att gå med på annars får du en CROSS JOIN vilket resulterar i 5 x 5 rader i utgången). Använder row_number() OVER () AS rn gör just det:den skapar en ny kolumn med alias rn som innehåller radnumret över hela raduppsättningen (OVER () , 5 rader på grund av LIMIT klausul). Du gör detta i båda underfrågorna så att du kan använda det som kopplingsvillkor:USING (rn) . Du behöver inte använda den här kolumnen i utdata.

Du har ingen kontroll över vilka 5 spårvagnstider som kommer att listas. Om du vill det bör du göra något som WHERE dt1 > CURRENT_TIME och ORDER BY dt1 i båda underfrågorna, eller något i den stilen.



  1. Standardlösenord för mysql i ubuntu-server 16.04

  2. Ring upp flera lagrade procedurer med Zend Framework

  3. Partitionsbeskärning baserad på kontrollbegränsning fungerar inte som förväntat

  4. Undviker JTextField setTextupprepning runt programmet