SQL订购1 - N - 1关系

时间:2015-12-02 13:58:36

标签: sql sqlite join

我有一个带有两个表的SQLite DB:

A
PK |名称


PK | FK1 | FK2

表B中的

,FK1和FK2都引用表A上的PK(实际上只有一个在DB上设置为外键,但FK2中的值仍然取自表A的所有PK的集合)

表B的目的是允许非线性排序。这保持了“下一个”关系。例如:

A
PK |姓名

1 |首先
2 |第二
3 |第三


PK | FK1 | FK2

1 | 1 | 2
2 | 2 | 3

这表示来自First的线性流 - >第二 - >第三

我正在寻找从A订购结果的最佳方法。最理想的是,线性流量将按表B规定的顺序生成。非线性流量会略有不同,但大多数情况下应订购相同的方式(并行路径彼此相邻放置除外)。

我已经骗过了我能想到的每一个连接,并且SQLite不支持PL / SQL,这使得这个问题变得更加困难。目前,我只是在运行:

A left join B on A.PK = B.FK1 order by B.FK2.  

连接这些表并订购结果的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

WITH RECURSIVE list AS (
  SELECT PK, Name
  FROM A
  WHERE PK = 1
  UNION ALL
  SELECT A.PK, A.Name
  FROM list
  JOIN B ON list.PK = B.FK1
  JOIN A ON B.FK2 = A.PK
)
SELECT * FROM list;