MySQL基于sortorder字段的JOIN

标签 mysql join

我有一个包含多个用户的数据库,每个用户可以拥有多本书籍

我想根据表 book 中的(整数)sortorder 字段获取用户及其第一本书的列表。

下面是我现在使用的 SQL 示例。唯一的问题是,它不会根据每个用户的 sortorder 字段返回第一本书。

SELECT
    b.id, b.user_id, b.sortorder, b.title
FROM
    books AS b
JOIN
    books_categories AS bc
ON
    (b.id =  bc.book_id)
JOIN
    categories AS c
ON
    (c.id =  bc.category_id)
JOIN
    users AS u
ON
    (u.id =  b.user_id)
GROUP BY
    b.user_id

最佳答案

您需要加入一个子查询,为每个用户选择第一本书。

SELECT b.id, b.user_id, b.sortorder, b.title
FROM books b
JOIN (
    SELECT b2.user_id, min(b2.sortorder) sortorder
    FROM books b2
    GROUP BY b2.user_id
) first_books USING (user_id, sortorder); 

关于MySQL基于sortorder字段的JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7120085/

相关文章:

同表中记录的 MySQL 连接类型

python - Sqlalchemy : association table for many-to-many relationship between template_id and department. 如何删除关系?

Mysql 和 codeigniter 加载非常慢

python - 循环将数据从串口读取到数据库

java - JPQL 加入多个连接的实体

mysql - 适合组织/地点/部门/用户的最佳数据库结构?

mysql - 如何知道一组日期范围是否涵盖更大的日期范围?

Mysql按2个字段分组

mysql - 如何在Mysql中使用DATE过滤重复的行

php - MySQL WHERE 子句与 JOIN