如何为加入的mysql表设置限制?

编程入门 行业动态 更新时间:2024-10-09 16:23:09

如<a href=https://www.elefans.com/category/jswz/34/1771179.html style=何为加入的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>

如你所见,它只显示 1112 的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表设置限制?

本文发布于:2024-05-13 13:17:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1759616.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:何为   mysql

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!