我有一个带有两个表的SQLite DB:
A
PK |名称
乙
PK | FK1 | FK2
,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.
连接这些表并订购结果的最佳方式是什么?
答案 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;