You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JOIN两张表时保留featured_products表的行顺序?

实现保留featured_products行顺序的表关联

当然有办法实现,核心是给featured_products的原始行顺序做标记,关联后按这个标记排序即可,具体两种常见方案:

方案一:用窗口函数生成行号(适用于PostgreSQL、MySQL 8+、SQL Server等支持窗口函数的数据库)

通过ROW_NUMBER()窗口函数给featured_products的每一行按原始顺序分配行号,关联后按行号排序:

SELECT p.item_id, p.price
FROM products p
INNER JOIN (
    SELECT item_id, ROW_NUMBER() OVER () AS row_num
    FROM featured_products
) f ON p.item_id = f.item_id
ORDER BY f.row_num;

方案二:用变量生成行号(适用于MySQL 5.x等不支持窗口函数的老版本数据库)

通过用户变量手动累加生成行号,再关联排序:

SELECT p.item_id, p.price
FROM products p
INNER JOIN (
    SELECT item_id, @row := @row + 1 AS row_num
    FROM featured_products, (SELECT @row := 0) AS init
) f ON p.item_id = f.item_id
ORDER BY f.row_num;

补充说明

如果featured_products本身有天然排序字段(比如插入时间created_at、优先级字段sort_order),直接用该字段做ORDER BY会更稳妥;没有这类字段时,上述方法就能满足需求。

内容的提问来源于stack exchange,提问作者Joe Defill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:50:13