【问题标题】:Combine two SELECT queries in PostgreSQL在 PostgreSQL 中合并两个 SELECT 查询
【发布时间】:2013-03-28 18:47:45
【问题描述】:

我想将两个选择查询与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> )

【问题讨论】:

  • 您真正想要实现什么,可以使用简单的 JOIN 或子查询(如果您只想获取所需的详细信息),而且您的两个查询的列也不匹配!!
  • 我要获取table2中所有满足第一个SELECT条件的记录
  • 如果这是唯一的要求,请阅读postgresql.org/docs/8.3/static/tutorial-join.html
  • 查看该文档后,我发现最好的解决方案是:SELECT * FROM tabl1 INNER JOIN table2 ON (table1.carto_id_key = table2.carto_id_key) WHERE table2.tag_id = 16 感谢您的帮助跨度>

标签: sql postgresql union common-table-expression


【解决方案1】:

使用CTE 在多个SELECT 中重用来自子查询的结果。

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

SELECT carto_id_key
FROM   cte

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

您很可能想要UNION ALL 而不是UNION。不排除重复项,这样更快。

【讨论】:

    猜你喜欢
    • 2013-05-27
    • 2015-09-04
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    相关资源
    最近更新 更多