当前位置: 首页 > 面试题库 >

子查询的自联接

郑翰海
2023-03-14
问题内容

我想知道,是否可以使用PostgreSQL将查询结果与自身连接?


问题答案:

您可以使用WITH来做到这一点:

WITH subquery AS(
    SELECT * FROM TheTable
) 
SELECT *
FROM subquery q1
JOIN subquery q2 on ...

或者通过创建一个包含查询的VIEW并加入该查询:

SELECT *
FROM TheView v1
JOIN TheView v2 on ...

还是蛮力的方法:两次键入子查询:

SELECT *
FROM (
    SELECT * FROM TheTable
) sub1
LEFT JOIN (
    SELECT * FROM TheTable
) sub2 ON ...


 类似资料:
  • 问题内容: 对于开发人员何时使用联接而不是子查询是否有经验法则还是相同的? 问题答案: 取决于RDBMS。您应该比较两个查询的执行计划。 根据我对Oracle 10和11的经验,执行计划始终是相同的。

  • 我需要从数据库中选择具有活动地址的公司(address.address_status_id=1)。如果地址不活动,则地址列应包含NULL。 有没有一种方法可以重新表述SQL语句,使它可以用JPA/QueryDSL表示? 编辑:我们将使用Oracle DB和Hibernate JPA provider(如果它能起作用的话)。

  • 问题内容: 我是一个老派的MySQL用户,并且始终喜欢子查询。但是如今,每个人都使用子查询,而我讨厌它。我不知道为什么 我缺乏理论知识来自行判断是否存在差异。子查询是否与a一样好,因此不必担心吗? 问题答案: 取自MySQL手册 (13.2.10.11将子查询重写为Joins): LEFT [OUTER] JOIN可以比同等子查询更快,因为服务器可能可以更好地对其进行优化-这不仅限于MySQL S

  • 问题内容: 我重构了从另一家公司继承来的应用程序的慢速部分,以使用内部联接而不是子查询,例如: 重构查询的运行速度大约快100倍。 (约50秒,约0.3秒)我期望有所改善,但是谁能解释为什么如此剧烈?where子句中使用的列均已建立索引。SQL是否在where子句中每行执行一次查询? 更新 -说明结果: 区别在于查询“(id)in()”的第二部分- vs 1带有连接的索引行: 问题答案: “相关子

  • 问题内容: 我重构了从另一家公司继承来的应用程序的慢速部分,以使用内部联接而不是子查询,例如: 重构后的查询运行速度提高了约100倍。 (约50秒,约0.3秒),我期望有所改善,但谁能解释为什么如此剧烈?where子句中使用的列均已建立索引。SQL是否在where子句中每行执行一次查询? 更新 -说明结果: 区别在于“(())中的id”查询的第二部分- vs 1带有连接的索引行: 问题答案: “相

  • 我只想检查一下QueryDSL版本3.1.1。-是否仍然不可能与子查询连接,就像这里的答案所写的:JPQL/querydsl:join subquery and get aliased column