我认为我的问题是通过“递归查询”解决的,但是由于mysql不支持递归查询,所以我试图使用相邻的列表模型。这应该不是问题,因为我知道我有多想去。
下面是我需要做的一个例子:
表类:
dept classNum prereqDept prereqClassNum
BIO 465 BIO 335
EE 405 EE 325
EE 325 EE 120
BIO 465 EE 120
BIO 335 BIO 225
BIO 225 CHEM 110
BIO 225 BIO 105
我需要的是某个级别的所有类(比如说400个),它们的所有先决条件都达到3个级别。
所以我会得到一些
dept classNum prereqDept prereqClassNum
BIO 465 BIO 335
BIO 465 BIO 225
BIO 465 CHEM 110
BIO 465 BIO 105
EE 405 EE 325
EE 405 EE 120
....
我知道如果我想深入到3层,我需要使用3个左连接,但是我不知道如何设置这些连接来获得我需要的。
有什么想法吗?
我会通知你的帮助!
我根本不能改变桌子的结构。
最佳答案
试试这个:
SELECT * FROM
(
(
SELECT t1.dept, t1.classNum, t1.prereqDept, t1.prereqClassNum
FROM class AS t1
WHERE t1.classNum >= 400
)
UNION
(
SELECT t1.dept, t1.classNum, t2.prereqDept, t2.prereqClassNum
FROM class AS t1
JOIN class AS t2 ON (t1.prereqDept = t2.dept AND t1.prereqClassNum = t2.classNum)
WHERE t1.classNum >= 400
)
UNION
(
SELECT t1.dept, t1.classNum, t3.prereqDept, t3.prereqClassNum
FROM class AS t1
JOIN class AS t2 ON (t1.prereqDept = t2.dept AND t1.prereqClassNum = t2.classNum)
JOIN class AS t3 ON (t2.prereqDept = t3.dept AND t2.prereqClassNum = t3.classNum)
WHERE t1.classNum >= 400
)
) AS t4
ORDER BY dept, classNum, prereqDept, prereqClassNum