2009-09-17 84 views
0

我期待執行一個有點複雜的SQL查詢,並且我有點時間包裹着我的頭圍繞我需要做的事情。我似乎無法找出適合我情況的JOIN。(SQL查詢,電子郵件)需要查詢根據同一個表中的字段查找「線程項」

基本上,我的問題是,我有一個EMAIL對象的表與各種頭分離出來,我試圖實現THREADING。據我估計,我需要做到以下幾點:

1)選擇沒有「IN-REF-TO」值的所有項目 - 那些有可能線程啓動

2)選擇的所有項目(從相同的表格),它們的「IN-REF-TO」字段中有以前找到的「REF-NUM」的任何一個

3)按日期排序......我想我可以處理這部分= P

我想在單個記錄集中返回所有數據,但我完全接受建議。你可以循環使用SQL嗎?如果有人認爲這不是一條路,那麼請務必建議其他一些機制。爲了記錄,我沒有設計數據庫,並且在接下來的6個月內很少有機會改變結構。

+1

請張貼DB結構,樣本數據及是什麼類型的數據庫(SQL/ORACLE/MySQL的)? – shahkalpesh 2009-09-17 19:34:53

+0

對於您以前的問題,接受一些答案會很好。 – RedFilter 2009-09-18 02:57:20

+0

是的,我需要回去查看其中的一些。但是,許多人從未收到過優質答案。 – 2009-09-18 03:13:43

回答

0

這樣的事情可能會爲你工作:

select * 
from Email 
order by coalesce(IN-REF-TO, REF-NUM) desc, CREATE-DATE 

它會先列出最新的主題(假定REF-NUMS按升序創建),其次是它的升序排列的答覆,然後下主題等。

它假設IN-REF-TO中有一個NULL值,當它是主題啓動器時。如果情況並非如此,那麼訂單將需要修改。當你發佈更多細節時,我可以這樣做。

編輯:

好吧,嘗試這樣的事情:

select e1.* 
from Email e1 
left outer join Email e2 on e1.IN-REF-TO like '%' + e2.REF-NUM + '%' 
order by coalesce(e2.REF-NUM, e1.REF-NUM), CREATE-DATE 
+0

感謝那篇文章。關於IN-REF-TO的事情是它隨每個REPLY而增長。它實際上是一個字符串,而不是一個數字。所以我需要找到「LIKE REF-NUM」來查看字符串是否包含REF-NUM。 – 2009-09-17 20:40:52