我有10个帖子,每个帖子都有一个类别。
Post Table
ID| POST |
1 | post 1 |
2 | post 2 |
3 | post 3 |
4 | post 4 |
5 | post 5 |
6 | post 6 |
7 | post 7 |
8 | post 8 |
9 | post 9 |
10| post 10|
Category table
ID|Pid| Category
1 | 1 | dog
2 | 2 | dog
3 | 3 | cat
4 | 4 | cat
5 | 5 | dog
6 | 6 | horse
7 | 7 | dog
8 | 8 | cat
9 | 9 | squirrel
10| 10| dog
我只想从每个类别中检索1个结果。这些类别是动态的,所以我不能做一个Where子句。
Select * from posts parent
LEFT join categories child on child.parent_id=parent.id
如何更改查询以完成此操作?
我应该发帖1,后3,后6&发布9作为结果。
答案 0 :(得分:0)
您可以使用聚合函数min
找到每个类别的一个Pid,然后将其与posts表连接以获得所需的结果。
select *
from post p
left join (
select category, min(pid) pid
from category
group by category
) c on p.id = c.pid;