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

如何通过JOIN查询获取对应最小rnode值的final_mlm表记录ID

解决方案:获取对应最小rnode值的记录ID

咱先理清楚逻辑:你原来的查询已经能算出目标最小rnode值了,接下来只要找到表中rnode等于这个值的记录ID就行,下面给你两种常用的实现方式:

方法一:子查询获取最小值后匹配

这种方式兼容性拉满,几乎所有关系型数据库都能跑:

SELECT id
FROM final_mlm
WHERE rnode = (
    -- 复用你原来的查询逻辑,只提取最小的rnode值
    SELECT MIN(node.rnode)
    FROM final_mlm AS node, final_mlm AS parent 
    WHERE node.lnode BETWEEN parent.lnode AND parent.rnode 
      AND parent.id = 1 
      AND node.placement='l'
)

如果有多个记录的rnode都等于这个最小值,这条语句会返回所有对应的ID。要是你还需要这些记录的其他字段,把SELECT id改成SELECT *就行。

方法二:用窗口函数更高效(适合支持窗口函数的数据库)

如果你的数据库是MySQL 8.0+、PostgreSQL、SQL Server这类支持窗口函数的,可以用这种方式,一次查询就能搞定:

SELECT id
FROM (
    SELECT 
        node.id,
        node.rnode,
        -- 计算当前结果集中的最小rnode
        MIN(node.rnode) OVER () AS min_rnode
    FROM final_mlm AS node
    -- 用JOIN语法替代旧的逗号连接,可读性更好
    JOIN final_mlm AS parent 
        ON node.lnode BETWEEN parent.lnode AND parent.rnode
    WHERE parent.id = 1 
      AND node.placement='l'
) AS sub_query
-- 筛选出rnode等于最小值的记录
WHERE rnode = min_rnode;

同样,要是需要其他字段,直接在子查询里加上,外层查询一起返回就行。

内容的提问来源于stack exchange,提问作者Mad Coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:35:21