我试图创建一个特定的SQL查询。首先,这里的ER图和我创建的表:递归Postgre/SQL查询
CREATE TABLE Course (
CNr INTEGER PRIMARY KEY NOT NULL,
costs NUMERIC(7, 2) NOT NULL
);
CREATE TABLE requires (
pred INTEGER REFERENCES Course(CNr),
succ INTEGER REFERENCES COURSE(CNr),
PRIMARY KEY(pred, succ)
);
与他们的价值观中的表是这样的:
| Course | | requires |
|-------------| |-------------|
| CNr | costs | | pred | succ |
|-----|-------| |------|------|
| 1 | 100 | | 1 | 2 |
| 2 | 200 | | 1 | 3 |
| 3 | 300 | | 2 | 3 |
| 4 | 400 | | 3 | 4 |
我需要的是返回一个疗程的CNR以及自身的成本加上所有前身课程的总和。在给定的表,它768,16这个样子:
| CNr | total |
|-----|-------|
| 1 | 100 |
| 2 | 300 |
| 3 | 600 |
| 4 | 1000 |
我已经离开了圆形的条目,因为它并没有真正意义在这种情况下,(真的不能永远做一个疗程,如果他们在去循环订单),所以我不确定你是否也需要查找。 这应该在某种程度上与WITH RECURSIVE一起完成,但我诚实地处于亏损状态。至少有人能指出我朝着正确的方向吗?
谢谢!然而,有人可以解释发生在合并(和(cpred.costs),0)+ c.costs 部分中的情况吗?我想我错过了某些东西。 – skulpt
这只是将当前课程的成本加到前辈的成本中。如果没有,前面的总和就是“NULL”。 –