首页 > 解决方案 > postgresql如何结合这两个查询?

问题描述

我正在尝试结合这两个查询,但我不知道如何

SELECT id FROM comments WHERE thread_id = $1 AND parent_id is NULL

这将返回一个整数。即 - 5

然后将 id 结果 (5) 用于此递归查询

With RECURSIVE recursetree AS
(
 SELECT * FROM comments WHERE comment_id = (use the id 5 here)
 UNION
 SELECT t.*
 From comments t
 JOIN recursetree rt ON rt.comment_id = t.parent_id                         
 )
 SELECT * from recursetree

标签: sqlpostgresql

解决方案


您应该能够将第一个查询放入递归子查询的锚点:

With RECURSIVE recursetree AS (
      SELECT c.
      FROM comments c
      WHERE thread_id = $1 
      UNION ALL
      SELECT c.*
      FROM comments c JOIN
           recursetree
           rt ON rt.comment_id = c.parent_id                         
     )
SELECT * 
FROM recursetree;

另请注意:

  • UNION ALL比 更有意义UNION,除非您想承担删除重复项的开销。
  • 表别名比任意字母c更有意义。commentst
  • $1表明您正在使用参数修改查询字符串。您应该为查询使用参数。

推荐阅读