如何使用SQL递归查找行?

时间:2015-10-04 10:15:24

标签: sql h2

假设我有下表给出了oldID和newID之间的关系,比如当项目的ID被更改时。

+-------+-------+ 
| oldID | newID |
|-------|-------|   
|  1    |   2   |
|  2    |   3   |
|  3    |   4   |
|  4    |   5   |
|  7    |   9   |
+-------+-------+

我需要进行三种类型的查询:

  1. 查找所有"链接ID"链,从最旧到最新。
  2. 给定一些ID,找到其未来的ID链。
  3. 给定一些ID,找到过去的ID链。
  4. 所以第一个应该是:

    (1, 2), (2, 3), (3, 4), (4, 5)
    (7, 9)
    

    在第二个例子中,假设我给出输入3,输出应为:

    (3, 4), (4, 5)
    

    第三个示例应为同一输入输出以下内容:

    (1, 2), (2, 3)
    

    编写三个SQL查询的最有效方法是什么(以可移植的方式)?

    编辑:

    我需要的结果如下:

    查询1

    chainID | chainIndex | ID
     -------+------------+----
       1          1         1
       1          2         2
       1          3         3
       1          4         4
       1          5         5
       2          1         7
       2          2         9
    

    查询2:输入3

     itemID
     ______
       3
       4
       5
    

    查询3:输入3

     itemID
     ______
       3
       2
       1     
    

    我对2和3更感兴趣,因为我可以保留一个单独的表,其中包含每个链的头部(第一个元素)的ID,并通过2实现1.保证每个ID最多只有一个子节点和父节点,我知道每个链的头部。

0 个答案:

没有答案