我正在寻找一个有点复杂的SQL查询,我有点时间围绕着我需要做的事情。我似乎无法找出适用于我的情况的JOIN。
基本上,我的问题是我有一个EMAIL对象表,其中分隔出各种标题,我正在尝试实现THREADING。据我估计,我需要做以下事情:
1)选择所有没有“IN-REF-TO”值的项目 - 因为这些可能是线程启动器
2)选择在“IN-REF-TO”字段中包含任何先前找到的“REF-NUM”的所有项目(来自同一个表格)
3)按日期排序......我想我可以处理这部分= P
我想在一个记录集中返回所有数据,但我完全愿意接受建议。你能用SQL循环吗?如果有人认为这不是解决问题的方法那么,请务必提出其他一些机制。为了记录,我没有设计数据库,在接下来的6个月左右,结构的变化几乎没有。
答案 0 :(得分:0)
这样的事可能适合你:
select *
from Email
order by coalesce(IN-REF-TO, REF-NUM) desc, CREATE-DATE
它将首先列出最新的主题(假设REF-NUM按升序创建),然后按升序排列,然后是下一个主题等。
假设在主题启动器中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