【发布时间】:2021-11-01 18:52:51
【问题描述】:
我有表 Alpha 和 Beta。 Beta 属于 Alpha。
create table Alpha
(
id int auto_increment primary key
);
create table Beta
(
id int auto_increment primary key,
alphaId int null,
orderValue int,
constraint Alpha_ibfk_1 foreign key (alphaId) references Alpha (id)
);
以下是一些测试记录:
insert into Alpha (id) values (1);
insert into Alpha (id) values (2);
insert into Beta (id, alphaId, orderValue) values (1, 1, 23);
insert into Beta (id, alphaId, orderValue) values (2, 1, 43);
insert into Beta (id, alphaId, orderValue) values (3, 2, 73);
我想为他们创建一个分页,这在我的应用程序逻辑方面是有意义的。所以当我设置limit 2时,例如,我期望得到两个Alpha记录及其相关记录的列表,但实际上当我设置limit 2时:
select *
from Alpha
inner join Beta on Alpha.id = Beta.alphaId
order by Beta.orderValue
limit 2;
结果我只有一个 Alpha 记录及其相关数据:
虽然我想为我的 LIMIT 构造找出一种方法,以仅计算 Alpha 记录的唯一出现次数并返回如下内容:
可以在 MySQL 中一次查询吗?也许不同的RDBMS?还是只选择多个查询?
=== 编辑
这样要求的原因是我想创建一个带有分页功能的 API,它返回 Alpha 记录及其相关的 Beta 记录。问题是从用户的角度来看,限制的工作方式没有意义:"Hey, I said I want 2 records of Alpha with its related data, not 1. What is that?"
【问题讨论】:
-
...
JOIN就是这样工作的。预期的结果是什么? -
想要的结果如图2所示,实际结果如图1所示。
-
你确定
alphaId应该指向表beta吗? -
LIMIT-ing 没有ORDER-ing 很少有意义。 -
感谢您的关注,我已添加订购并修复了
references问题。