MySQL查询从每个类别LEFT JOIN获得1个结果

时间:2017-02-28 19:31:58

标签: mysql

我有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作为结果。

1 个答案:

答案 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;