微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据数据库值限制返回的结果

如何解决根据数据库值限制返回的结果

我有两个表格,类别和故事。

Stories 表包含按类别组织的内容

categories_id,category_name,category_story_count
1,news,2
2,funnies,3

stories_id,categories_id,story_name,story_content,story_active
1,1,"Tax Hike","blah blah",1
2,"Tax Cuts","Election",1 
4,2,"Peanuts",1
5,"Garfield",1
6,"Archie",1 

我想要一个查询,该查询将根据 category_story_count 返回每个类别的正确故事数量,以及故事是否处于活动状态 (story_active = 1)

所以结果应该是这样的:

"news","Tax Hike"
"news","Tax Cuts"
"funnies","Peanuts"
"funnies","Garfield"
"funnies","Archie"

两个“新闻”故事,因为新闻类别 1 的 category_story_count = 2,三个“搞笑”故事,因为搞笑 2 的 category_story_count = 3

我已经尝试过内部连接、嵌套和限制,但就是无法让它返回我想要的东西。

任何帮助将不胜感激。

编辑: MysqL 版本() 8.0.23

解决方法

这是使用窗口函数的解决方案:

with cte as ( 
  select *,row_number() over (partition by c.categories_id order by s.stories_id) as rownum 
  from Categories as c join Stories as s using (categories_id) 
) select * from cte where rownum <= category_story_count;

+---------------+---------------+----------------------+------------+------------+---------------+--------------+--------+
| categories_id | category_name | category_story_count | stories_id | story_name | story_content | story_active | rownum |
+---------------+---------------+----------------------+------------+------------+---------------+--------------+--------+
|             1 | new           |                    2 |          1 | Tax Hike   | blah blah     |            1 |      1 |
|             1 | new           |                    2 |          2 | Tax Cuts   | blah blah     |            1 |      2 |
|             2 | funnies       |                    3 |          4 | Peanuts    | blah blah     |            1 |      1 |
|             2 | funnies       |                    3 |          5 | Garfield   | blah blah     |            1 |      2 |
|             2 | funnies       |                    3 |          6 | Archie     | blah blah     |            1 |      3 |
+---------------+---------------+----------------------+------------+------------+---------------+--------------+--------+

在 MySQL 8.0.23 上测试。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?