有没有一种方法可以在Postgres中进行级联选择

苏拉卜

我正面临一个场景,其中我具有同一表的外部引用字段,并且我需要获取此类外部引用的值列表。例如:

Field1 | Field2
----------------
X      |   Y
Y      |   Z
Z      |   A

现在,我要级联选择Field2,因为我希望输出为{Y,Z,A}。

有没有办法做到这一点?

MichałKołodziejski

我认为您正在寻找SQL递归查询。它的语法如下所示:

WITH RECURSIVE <cte_name> (column, ...) AS (
<non-recursive_term>
UNION ALL
<recursive_term>)
SELECT ... FROM <cte_name>;

在您的情况下,它将如下所示:

  1. 创建表并填充它:

    create table example (field1 char(1), field2 char(1));
    insert into example values ('X', 'Y');
    insert into example values ('Y', 'Z');
    insert into example values ('Z', 'A');
    select * from example;
    

    结果:

     field1 | field2 
     -------+--------
      X     | Y
      Y     | Z
      Z     | A
     (3 rows)
    
  2. 询问:

     WITH RECURSIVE linked_example(list, first, last) AS (
       SELECT field1 || ', ' || field2, field1, field2 FROM example
       UNION ALL
       SELECT list || ', ' || field2, first, field2
         FROM
           linked_example, example
         WHERE
           last = field1
     )
     SELECT * from linked_example;
    

    结果:

         list    | first | last 
     ------------+-------+------
      X, Y       | X     | Y
      Y, Z       | Y     | Z
      Z, A       | Z     | A
      X, Y, Z    | X     | Z
      Y, Z, A    | Y     | A
      X, Y, Z, A | X     | A
     (6 rows)
    
  3. 现在,只需使用WHERE子句限制查询:

     WITH RECURSIVE linked_example(list, first, last) AS (
       SELECT field1 || ', ' || field2, field1, field2 FROM example
       UNION ALL
       SELECT list || ', ' || field2, first, field2
         FROM
           linked_example, example
         WHERE
           last = field1
     )
     SELECT * from linked_example WHERE first = 'Y';
    

    结果:

       list   | first | last 
     ---------+-------+------
      Y, Z    | Y     | Z
      Y, Z, A | Y     | A
     (2 rows)
    

    如您所见,最后一行正是您想要的。

如果您想了解有关SQL递归查询的更多信息和示例,可以阅读有关此主题的两篇文章:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以在CSS中进行计算?

来自分类Dev

有没有一种方法可以控制JPA级联删除顺序?

来自分类Dev

有没有一种方法可以控制JPA级联删除顺序?

来自分类Dev

有没有一种方法可以在React功能组件中进行一次api调用?

来自分类Dev

有没有一种方法可以记录在Django视图中进行的查询总数?

来自分类Dev

有没有一种方法可以获取特定的权限以在android中进行调试?

来自分类Dev

有没有一种方法可以上传html文档并在VueJs中进行渲染?

来自分类Dev

有没有一种方法可以从wordpress菜单项中进行页面定位?

来自分类Dev

有没有一种方法可以记录在Django视图中进行的查询总数?

来自分类Dev

有没有一种方法可以获取特定的权限以在android中进行调试?

来自分类Dev

有没有一种方法可以遍历列表而不进行重复选择?

来自分类Dev

有没有一种方法可以通过“ ps”中的几种条件进行选择?

来自分类Dev

有没有一种方法可以使用自定义分隔符进行选择

来自分类Dev

有没有一种方法可以禁用Postgres中的函数重载

来自分类Dev

有没有一种方法可以减少postgres中的余额减去?

来自分类Dev

Postgres:有没有一种方法可以在INSERT语句之后执行代码?

来自分类Dev

有没有一种方法可以为QGraphicsItem指定选择区域?

来自分类Dev

有没有一种方法可以结合计数和选择查询?

来自分类Dev

有没有一种方法可以选择单击时数组元素的索引?

来自分类Dev

有没有一种方法可以使选择特定变量的效率更高?

来自分类Dev

有没有一种方法可以对宏进行计数?

来自分类Dev

有没有一种方法可以对子数组的张量进行排序?

来自分类Dev

有没有一种方法可以基于常量的存在进行条件编译?

来自分类Dev

有没有一种方法可以组合多个类型进行打字

来自分类Dev

有没有一种方法可以与表格的某些行进行比较?

来自分类Dev

有没有一种方法可以按角度对服务进行分组?

来自分类Dev

有没有一种方法可以打开多个Word文件进行打印?

来自分类Dev

有没有一种方法可以对拆分的数组进行排序?

来自分类Dev

有没有一种方法可以在Git中对提交进行分组?

Related 相关文章

  1. 1

    有没有一种方法可以在CSS中进行计算?

  2. 2

    有没有一种方法可以控制JPA级联删除顺序?

  3. 3

    有没有一种方法可以控制JPA级联删除顺序?

  4. 4

    有没有一种方法可以在React功能组件中进行一次api调用?

  5. 5

    有没有一种方法可以记录在Django视图中进行的查询总数?

  6. 6

    有没有一种方法可以获取特定的权限以在android中进行调试?

  7. 7

    有没有一种方法可以上传html文档并在VueJs中进行渲染?

  8. 8

    有没有一种方法可以从wordpress菜单项中进行页面定位?

  9. 9

    有没有一种方法可以记录在Django视图中进行的查询总数?

  10. 10

    有没有一种方法可以获取特定的权限以在android中进行调试?

  11. 11

    有没有一种方法可以遍历列表而不进行重复选择?

  12. 12

    有没有一种方法可以通过“ ps”中的几种条件进行选择?

  13. 13

    有没有一种方法可以使用自定义分隔符进行选择

  14. 14

    有没有一种方法可以禁用Postgres中的函数重载

  15. 15

    有没有一种方法可以减少postgres中的余额减去?

  16. 16

    Postgres:有没有一种方法可以在INSERT语句之后执行代码?

  17. 17

    有没有一种方法可以为QGraphicsItem指定选择区域?

  18. 18

    有没有一种方法可以结合计数和选择查询?

  19. 19

    有没有一种方法可以选择单击时数组元素的索引?

  20. 20

    有没有一种方法可以使选择特定变量的效率更高?

  21. 21

    有没有一种方法可以对宏进行计数?

  22. 22

    有没有一种方法可以对子数组的张量进行排序?

  23. 23

    有没有一种方法可以基于常量的存在进行条件编译?

  24. 24

    有没有一种方法可以组合多个类型进行打字

  25. 25

    有没有一种方法可以与表格的某些行进行比较?

  26. 26

    有没有一种方法可以按角度对服务进行分组?

  27. 27

    有没有一种方法可以打开多个Word文件进行打印?

  28. 28

    有没有一种方法可以对拆分的数组进行排序?

  29. 29

    有没有一种方法可以在Git中对提交进行分组?

热门标签

归档