2013-04-06 44 views
9

Tôi muốn kết hợp hai truy vấn chọn với UNION.
Làm cách nào để sử dụng kết quả từ SELECT đầu tiên trong số SELECT thứ hai?Kết hợp hai truy vấn SELECT trong PostgreSQL

(SELECT carto_id_key FROM table1 
    WHERE tag_id = 16) 
UNION 
(SELECT * FROM table2 
    WHERE carto_id_key = <the carto_id result from above>) 
+0

những gì bạn thực sự muốn đạt được, điều này có thể là với một JOIN đơn giản hoặc một truy vấn phụ (nếu bạn chỉ muốn có được các chi tiết cần thiết), cũng các cột cả hai truy vấn của bạn không phù hợp !! – Akash

+0

Tôi muốn nhận tất cả các bản ghi trong bảng 2 đáp ứng điều kiện của SELECT đầu tiên – Bwyss

+0

nếu đó là yêu cầu duy nhất, hãy đọc http://www.postgresql.org/docs/8.3/static/tutorial-join.html – Akash

Trả lời

9

Sử dụng một CTE để tái sử dụng kết quả từ một subquery trong hơn một SELECT.
Bạn cần PostgreSQL 8.4+ cho rằng:

WITH x AS (SELECT carto_id_key FROM table1 WHERE tag_id = 16) 

SELECT carto_id_key 
FROM x 

UNION ALL 
SELECT t2.some_other_id_key 
FROM x 
JOIN table2 t2 ON t2.carto_id_key = x.carto_id_key 

Bạn có lẽ hầu hết muốn UNION ALL thay vì UNION. Không loại trừ trùng lặp và nhanh hơn theo cách này.

Các vấn đề liên quan