何为加入的mysql表设置限制?"/>
如何为加入的mysql表设置限制?
我试图用下面的查询来合并3个表的数据。
SELECT `media_category`.id as cat_id,
`media_category`.category_name as cat_name,
`video`.`id` as vid_id,
`video`.`name` as vid_name,
`screenshots`.name as screenshot_name
FROM `media_category`
LEFT JOIN video
ON `media_category`.id = `video`.`category_id`
LEFT JOIN screenshots
ON `video`.id = `screenshots`.`media_id`
WHERE `screenshots`.name NOT LIKE '%\_%'
版本:mysql 5.7
它工作得很好。但我需要限制从以下地方获取的行数 video
列表 LIMIT 10
每类
有什么办法吗?
回答如下:你没有提到你使用的是哪个MySQL版本,所以我假设是MySQL 8.x。
在MySQL 8.x中,你可以使用 DENSE_RANK()
函数来识别你想要的行。然后,一个简单的谓词将删除你不想要的行。
例如,如果我们想限制2行的 b
在每个 a
(不论行数多少) c
),你可以做到。
select *
from (
select
a.id,
b.id as bid,
dense_rank() over(partition by a.id order by b.id) as drank,
c.id as cid
from a
left join b on b.aid = a.id
left join c on c.bid = b.id
) x
where drank <= 2
结果。
id bid drank cid
-- --- ----- ------
1 11 1 100
1 11 1 101
1 11 1 102
1 11 1 103
1 12 2 120
2 20 1 200
2 20 1 201
2 21 2 202
3 30 1 <null>
如你所见,它只显示 11
和 12
的id=1,尽管它总共有5条记录(5条记录都是等级1和2)。你可以在下面看到运行示例 DB小提琴. 这个例子的数据脚本是:
create table a (id int primary key not null);
insert into a (id) values (1), (2), (3);
create table b (id int primary key not null, aid int references a (id));
insert into b (id, aid) values
(11, 1), (12, 1), (13, 1), (14, 1),
(20, 2), (21, 2),
(30, 3);
create table c (id int primary key not null, bid int references b (id));
insert into c (id, bid) values
(100, 11), (101, 11), (102, 11), (103, 11),
(120, 12), (130, 13), (140, 14),
(200, 20), (201, 20),
(202, 21);
更多推荐
如何为加入的mysql表设置限制?
发布评论