问题 在PostgreSQL中组合两个SELECT查询


我想结合两个选择查询 UNION
我怎样才能使用第一个结果 SELECT 在第二 SELECT

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

11470
2018-04-06 09:52


起源

你真正想要实现的是什么,这可以通过一个简单的JOIN或一个子查询(如果你只是想得到所需的细节),你的两个查询的列也不匹配! - Akash
我想得到table2中符合第一个SELECT条件的所有记录 - Bwyss
如果这是唯一的要求,请阅读 postgresql.org/docs/8.3/static/tutorial-join.html - Akash
在查看该文档后,我找到了最佳解决方案:SELECT * FROM tabl1 INNER JOIN table2 ON(table1.carto_id_key = table2.carto_id_key)WHERE table2.tag_id = 16感谢您的帮助 - Bwyss


答案:


用一个 CTE 重用多个子查询中的结果 SELECT
你需要PostgreSQL 8.4+:

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

你最想要的 UNION ALL 代替 UNION。不排除重复,并且这种方式更快。


13
2018-04-06 11:32