mysql - 带有 ROW_NUMBER 和 RIGHT JOIN 的 MYSQL 查询
问题描述
我需要根据行号获取数据,例如:如果我通过ROW_NUM=2
,它应该单独获取第二行数据。有人可以帮我做一个 MYSQL 查询吗?我试过了ROW_NUMBER()
,但它不起作用
Select arh.ROUTE_NUM,ard.ACTIVE_ROUTE_DETAILS_ID,ROUTE_NUM
from HEADER as arh right join DETAILS ard on HEADER_ID =
ard.HEADER_ID where arh.INFOPRO_DIV IN (050) and arh.ROUTE_DATE = '2020-11-25'
解决方案
SQL 表表示无序集。因此,要定义第二行,您需要一个ORDER BY
. 在 MySQL 中执行此操作的规范方法使用LIMIT
/ OFFSET
:
select arh.ROUTE_NUM, ard.ACTIVE_ROUTE_DETAILS_ID, ROUTE_NUM
from HEADER arh join
DETAILS ard
on HEADER_ID = ard.HEADER_ID
where arh.INFOPRO_DIV IN (050) and
arh.ROUTE_DATE = '2020-11-25'
order by arh.ROUTE_NUM, ard.ACTIVE_ROUTE_DETAILS_ID
limit 1 offset 1; -- "offset 1" corresponds to the second row
注意:大多数人更LEFT JOIN
喜欢RIGHT JOIN
. 也就是说,该WHERE
子句无论如何都会将外部联接变成内部联接,所以我认为常规联接会起作用。另外,从标题到细节的连接是有道理的。
推荐阅读
- three.js - 如何在threejs中从俯仰,滚动和航向执行3d模型的完全旋转?
- c# - 如何使用身份 2.2 并且不在 ApplicationUserManager 上使用 ILookupNormalizer
- java - Selenium 自动化 - 如何从此列表中选择下拉菜单项而不会出现异常错误?
- java - 我无法从测试包到主包进行 ComponentScan
- datetime - W3C 承认的 UTC 日期时间格式是否与 ISO 8601 相同?
- java - BCrypt 使用 Java 和 PHP,发送加密的密码并对其进行解码
- javascript - 如何从存储 javascript 对象的 mysql 列中取回有效的 JSON
- postgresql - 在表中实现每行“最后访问时间”的正确方法是什么?
- java - reactor-netty:使用 keep-alive HTTP 客户端
- javascript - 使用 getElementsByClassName 获取直接子元素