我正在创建消息传递应用程序。我有一个带有父ID的表,以标识它是主键消息的子代。现在,我想获取父母的详细信息,并且有孩子的可用ID。例如选择条件为id = 28的parent = 0的值。
这是我的表的结构和示例数据。
message_tbl
id message date parent_msg
27 hello 2020-05-24 15:03:40 0
28 world 2020-05-24 15:04:17 27
我想要这样的结果:
27 hello 2020-05-24 15:03:40 0
这里是sqlfiddle的结构:http://sqlfiddle.com/#!9/2b18d2
对于单层关系,将进行自我连接:
select mp.*
from message_tbl mp
inner join message_tbl mc on mc.parent_msg = mp.id
where mc.id = 28
如果级别的数量可变,则可以使用递归查询(仅在MyQSL 8.0中可用):
with recursive cte as (
select * from message_tbl where id = 28
union all
select m.*
from message_tbl m
inner join cte c on c.parent_msg = m.id
)
select * from cte where parent_msg = 0