首页 > 解决方案 > 带有 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'

在此处输入图像描述

标签: mysqlsqlrow-number

解决方案


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子句无论如何都会将外部联接变成内部联接,所以我认为常规联接会起作用。另外,从标题到细节的连接是有道理的。


推荐阅读