sql - 获取列表的最有效方法?

标签 sql mysql

获取事物子列表的最佳方法是什么?

我有两个表:

create table A (
  id int primary key
)

create table B (
  id int primary key,
  aid int foreign key references A( id ),
  sort_key int
)

我想获得对象 A 的列表,以及子对象 B,但只有 B 的前五个。

假设 A 是人,B 是食物类型,sort_key 是一个人对该食物的喜爱程度。我如何获得每个人(或某些人)及其最喜欢的 5 种食物?

最佳答案

在前面的评论中,如果它是 INT,则不能在其中放置非数字。

假设以下数据:

a
--
id
1
2
3

b
------------------------
id    aid   sort_key
1    1     1
2    1     2
3    2     1
4    3     1
5    1     3
6    1     4
7    1     5
8    1     6
9    2     2
10  2     3 

MySQL 中的以下查询将为您提供:

SELECT a.*,
    (SELECT GROUP_CONCAT(id) AS ids FROM b AS bi WHERE bi.aid = a.id ORDER BY sort_key LIMIT 5) AS ids
FROM a

结果:

id   ids
1   1,2,5,6,7,8
2   3,9,10
3   4

关于sql - 获取列表的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1174482/

相关文章:

Mysql限制当整个列表可能改变

mysql - 将 Mysql 表复制到 Oracle 时非法使用 LONG 数据类型

php - 无缝地将 1 添加到上一行值?

database-design - 要索引的列太多 - 使用 mySQL 分区?

php - 我如何在超链接上执行另一个 sql 查询,单击以显示数据库中的完整详细信息

mysql - SQL:选择属于所有指定流派的所有电影

SQL Left 将两个表合并为一个

SQL Counting 计数结果

sql - 等待还是现在?就是那个问题。 PostgreSQL 与甲骨文

mySQL 条件选择?