PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Kết hợp 2 truy vấn CHỌN

Nhìn qua, bạn muốn tạo một đầu ra liệt kê 5 xe điện đi từ một số nhà ga đến Quảng trường Thành phố và 5 xe điện đi từ Quảng trường Thành phố đến một số nhà ga khác. Trong trường hợp này - bạn không thực hiện bất kỳ kết nối nào (ví dụ:đúng giờ) giữa hai điều này - bạn nên kết hợp trên một cột giả, row_number() OVER () nghĩ đến:

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

Trong mỗi truy vấn phụ, bạn chọn năm hàng quan tâm. Vì không có thuộc tính rõ ràng nào nên bạn có thể JOIN trên hai tập hợp hàng này, bạn phải tạo một số cột giả có thể phục vụ mục đích đó (bạn cần một cái gì đó để nối hoặc bạn sẽ nhận được CROSS JOIN dẫn đến 5 x 5 hàng trong đầu ra). Sử dụng row_number() OVER () AS rn thực hiện điều đó:nó tạo một cột mới với bí danh rn chứa số hàng trên toàn bộ tập hợp hàng (OVER () , 5 hàng vì LIMIT mệnh đề). Bạn thực hiện việc này trong cả hai truy vấn phụ để có thể sử dụng nó làm điều kiện kết hợp:USING (rn) . Bạn không cần phải sử dụng cột này trong đầu ra.

Bạn không có quyền kiểm soát 5 thời gian xe điện nào sẽ được liệt kê. Nếu bạn muốn điều đó, bạn nên làm điều gì đó như WHERE dt1 > CURRENT_TIMEORDER BY dt1 trong cả hai truy vấn phụ hoặc một cái gì đó dọc theo dòng đó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tổng hợp tất cả các giá trị không trong cùng một nhóm

  2. Chuẩn hóa bảo mật PostgreSQL trên môi trường đa đám mây

  3. Thay thế khi mệnh đề IN được đưa vào RẤT NHIỀU giá trị (postgreSQL)

  4. Làm cách nào để hiển thị các ký tự unicode vô hình trong psql / postgres?

  5. Biến ràng buộc cho tên cột trong PHP cho truy vấn Postgresql