2009-09-17 85 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