Sql 在多对多关系中搜索最后一条注释
我有三张桌子: 发布、发布和评论 这是一种多对多的关系 我想为每个帖子选择最后一条评论。 因此,在DESC limit 1处通过create_从注释顺序中选择*之类的操作在这里不起作用 我想要像这样的东西:Sql 在多对多关系中搜索最后一条注释,sql,doctrine-orm,many-to-many,max,Sql,Doctrine Orm,Many To Many,Max,我有三张桌子: 发布、发布和评论 这是一种多对多的关系 我想为每个帖子选择最后一条评论。 因此,在DESC limit 1处通过create_从注释顺序中选择*之类的操作在这里不起作用 我想要像这样的东西: select * from post as p left join post_comment as pc on (pc.post_id = p.id) left joint comment as c on (c.id = pc.comment_id) left j
select *
from post as p
left join post_comment as pc on (pc.post_id = p.id)
left joint comment as c on (c.id = pc.comment_id)
left joint comment as c2 on (c2.id = pc.comment_id and c2.id > c.id)
where c2.id is null
对于一对多关系来说,它非常有效,但对于多对多关系,我无法理解这一点
注意:我重命名了我的表。在我的代码中,我不使用comment和post。我需要一个多对多的关系
谢谢您查询中的主表应该是postcomment,您可以按postid分组,并获取maxpostcomment,前提是它是一个自动递增ID 然后,您只需将结果与其他表联接,即可获得其余数据。 由于您可能需要从其他表中获取大量数据,并且为了避免将所有这些数据添加到group by,我将使用CTE: CTE是sql server语法,如果不使用sql server,则必须使用另一种机制来存储此临时数据
with my_cte as
(
select idpost, max(idcomment) as last_comment_id
from postcomment pc
group by idpost
)
select *
from my_cte
join post p on p.idpost=my_cte.idpost
join comment c on c.idcomment=my_cte.last_comment_id
查询中的主表应该是postcomment,您可以按postid进行分组,并获取maxpostcomment,前提是它是一个自动递增ID 然后,您只需将结果与其他表联接,即可获得其余数据。 由于您可能需要从其他表中获取大量数据,并且为了避免将所有这些数据添加到group by,我将使用CTE: CTE是sql server语法,如果不使用sql server,则必须使用另一种机制来存储此临时数据
with my_cte as
(
select idpost, max(idcomment) as last_comment_id
from postcomment pc
group by idpost
)
select *
from my_cte
join post p on p.idpost=my_cte.idpost
join comment c on c.idcomment=my_cte.last_comment_id
我是这样做的:
select *
from post as p
left join post_comment as pc on (pc.post_id = p.id)
left join comment as c on (c.id = pc.comment_id)
left outer join
(post_comment as pc2
inner join comment as c2 on (c2.id = pc2.comment_id)
) on (bc2.post_id = p.id and c1.created_at < c2.created_at)
where c2.id is null
我是这样做的:
select *
from post as p
left join post_comment as pc on (pc.post_id = p.id)
left join comment as c on (c.id = pc.comment_id)
left outer join
(post_comment as pc2
inner join comment as c2 on (c2.id = pc2.comment_id)
) on (bc2.post_id = p.id and c1.created_at < c2.created_at)
where c2.id is null
您使用的是哪种数据库管理系统?神谕博士后?如果你使用ORM,那么可能会用哪种ORM和哪种语言来标记你的问题。也许你会得到你需要的确切答案。好的,我将它标记为doctrine2你使用的是哪种DBMS?神谕博士后?如果你使用ORM,那么可能会用哪种ORM和哪种语言来标记你的问题。也许你会得到你所需要的确切答案。好的,我将把它标记为doctrine2我使用orm。所以我更喜欢用陈述来表达。但是谢谢,我用orm。所以我更喜欢用陈述来表达。但是谢谢。