2010-11-25 62 views
1

我正在使用「解決」活動網絡的算法 - 它是項目管理中的課程。該算法在紙上工作,但爲了解決它與計算機,我需要一個聰明的查詢,在自聯表中找到不存在的元組。自連表中不存在的元組

假設活動如下: A轉到B,A轉到C,B轉到D,C轉到D 我正在使用的表格(稱爲'CPM')是這樣填充的:

+----+----------+--------+---------+ 
| ID | Fromnode | Tonode | Counter | 
+----+----------+--------+---------+ 
| 1 | A  | B  | 0  | 
+----+----------+--------+---------+ 
| 2 | A  | C  | 0  | 
+----+----------+--------+---------+ 
| 3 | B  | D  | 0  | 
+----+----------+--------+---------+ 
| 4 | C  | D  | 0  | 
+----+----------+--------+---------+ 

我想寫一個查詢返回所有'fromnodes'沒有對應的'tonodes'。這就是我寫的

select id, fromnode 
from cpm 
where counter = 0 
and not exists (select 'X' 
from cpm cpm1 
where tonode = cmp1.fromnode) 

但這是返回所有四個元組,而不僅僅是前兩個。

使用「不存在」的查詢很難理解,因爲自我連接只會讓事情變得更糟。什麼應該是查詢?順便說一下,我正在使用火鳥,但我不認爲這是問題所在。

TIA, No'am

回答

2

嘗試外連接:select a.id, a.fromnode from cpm as a left outer join cpm as b on a.fromnode = b.tonode where b.fromnode is null

+0

我不知道是否接受你的答案,因爲它給出了錯誤的結果,但至少說明了正確的結果是什麼(或者我誤導了你)。您的查詢返回'D',而不是'A'。這是正確的查詢 - – 2010-11-25 14:08:34