加入的子选择和'其中'联合表上的声明

时间:2014-11-26 09:47:37

标签: mysql join subquery

有两个表,q_entries(80条记录)和相关的q_entries_comments(37条记录)。

当我加入时:

select q_entries.*,q_entries_comments.comment  
from q_entries 
left join q_entries_comments 
on q_entries_comments.entry_id=q_entries.id

我得到了109条记录。

现在,我想将结果限制为仅10个条目,首先我这样做:

select q_entries.*,q_entries_comments.comment  
from q_entries 
left join q_entries_comments 
on q_entries_comments.entry_id=q_entries.id 
limit 0,10

但这不是我想要的 - 在结果集中有一个id = 1的重复条目,以及附加到这个条目的10条评论'。

我想要的是获得10个不同的条目,每个条目的评论数量与实际数量相同,所以我这样做:

select q_entries.*,q_entries_comments.comment  
from (select * from q_entries limit 0,10) as q_entries
left join q_entries_comments 
on q_entries_comments.entry_id=q_entries.id 

现在我得到了我想要的东西,即37条记录(对前10条'条目有很多评论),但只有10条条目'条目'。

当我向相关表添加where语句时会出现问题,如下所示:

select q_entries.*,q_entries_comments.comment  
from (select * from q_entries limit 0,10) as q_entries
left join q_entries_comments 
on q_entries_comments.entry_id=q_entries.id 
where q_entries_comments.comment like '%b%'

它显然显示我的参赛作品太少,因为它会搜索'%b%'仅在前10条'附带的评论中。我真正想要的是总是得到10个条目'和他们所附的所有评论。

怎么做?

1 个答案:

答案 0 :(得分:1)

您可以在第二个内部查询中使用WHERE子句,如下所示:

select q_entries.*,q_entries_comments.comment  
from (select * from q_entries limit 0,10) as q_entries
left join (select * from q_entries_comments where q_entries_comments.comment like '%b%') as q_entries_comments 
on q_entries_comments.entry_id=q_entries.id