如何从两个不同的表中获取数据的层次结构?

4

我有两个表格TwitterStatustwitterstatusDetails,

两个表格中的数据分别如下图所示:

enter image description here

在twitterstatus表格中,第4个记录的ts_StatusID为"587573444633427968",是twitterstatus_Details表格中第3个记录的父记录。该父记录的值为"587573444633427968",对于下一个记录,最近一个子记录的是twitterstatus表格中具有该子记录的字段值的父记录,依此类推,这就是层次结构。

如何基于子父关系从两个表中获取记录?

如果还有疑问,请在评论区提出。

谢谢!


我尝试使用普通查询,但这并不能帮助我。 - Chiragkumar Thakar
@ughai,你收到我的问题了吗? - Chiragkumar Thakar
我不确定我理解你的帖子。你能详细说明一下或者确认一下你的表结构是否正确吗?你试图让Twitter状态记录成为Twitter详情的父级,而下一个Twitter状态记录成为Twitter详情的子级,这对我来说似乎不合逻辑。 - Tom D'Hulster
让我们在聊天中继续这个讨论 - Chiragkumar Thakar
总结一下:一个Twitter状态有一个Twitter详细信息。这个Twitter详细信息有一个链接到另一个Twitter状态,而这个Twitter状态又链接到另一个不同的Twitter详细信息,以此类推。 - Tom D'Hulster
显示剩余4条评论
1个回答

2
我认为您需要使用递归CTE来获取每个嵌套级别。希望这能让您更接近目标。
--REPLACE @TwitterStatus and @twitterstatus_Details with your tablename.
;WITH CteTStatus
AS
(
    SELECT h.*, d.*, 0 as lvl
    FROM  @TwitterStatus AS h
    INNER JOIN @twitterstatus_Details AS d ON h.id_StatusID = d.td_InreplytoStatusID
    WHERE ts_StatusID = '587573444633427968'--WHERE CLAUSE TO GET ROOT PARENT
    UNION ALL -- UNION TO DIG INTO CHILD's
    SELECT h.*, d.*, lvl + 1 as lvl
    FROM  @TwitterStatus AS h
    INNER JOIN @twitterstatus_Details AS d ON h.id_StatusID = d.td_InreplytoStatusID
    INNER JOIN CteTStatus AS Parent ON h.ts_InreplytoStatusID = Parent.td_StatusID
)

SELECT *
FROM CteTStatus

1
看起来不错,但我想根据 ts_StatusID "587573444633427968" 获取数据,当我传递这个StatusID时,它应该返回特定Thread ts_StatusID的整个线程。 我尝试通过传递ts_StatusID来实现,但找不到期望的结果。 @AXMIM,你明白我的意思吗? - Chiragkumar Thakar
1
@Chirag Thakar 我编辑了我的答案,以获取ts_statusID“587573444633427968”的数据。在深入细节之前更改了初始的where子句。 - AXMIM
非常感谢您宝贵的反馈,但是它只返回了表TwitterStatus的数据,而不是两个表的数据。 - Chiragkumar Thakar
1
@ChiragThakar [h.* = TwitterStatus表中的字段] [d.* = TwitterStatus_Detail表中的字段] [lvl = 记录的嵌套程度(根级别为0)]这定义了名为“CteTStatus”的CTETable。 因此,最终的“SELECT * FROM CTE”包括来自TwitterStatus和TwitterStatus_Detail的信息,以及列“lvl”。如果有任何问题,可能是“INNER JOIN”应更改为“LEFT JOIN”,以处理没有任何“TwitterStatus_Detail”的“TwitterStatus”。 - AXMIM
@ChiragThakar 感谢你的提议,但我已经很忙了。祝你有美好的一天。 - AXMIM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接