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

将INNER JOIN替换为NATURAL JOIN后查询结果不一致的问题

解决INNER JOIN转NATURAL JOIN后结果不一致的问题

你的问题出在子查询丢弃了关联所需的关键字段:原INNER JOIN通过person_order.person_id = person.id关联,但你写的子查询只提取了order_date,导致NATURAL JOIN找不到同名的关联字段,最终执行了笛卡尔积,结果和原查询不符。

要实现和原INNER JOIN完全一致的逻辑,NATURAL JOIN需要依赖同名的关联字段自动匹配。因此你需要将person_order的person_id重命名为id(和person表的主键字段名一致),再执行NATURAL JOIN。

正确的SQL语句

SELECT po.order_date,
    p.name || ' (' || 'age:' || p.age || ')' AS person_information
FROM (
        SELECT order_date, person_id AS id
        FROM person_order
    ) AS po
    NATURAL JOIN person p
ORDER BY 1, 2;

逻辑说明

  • 子查询将person_order的person_id重命名为id,和person表的主键字段名保持一致
  • NATURAL JOIN会自动识别这个同名的id字段作为关联条件,等价于原INNER JOIN的person_order.person_id = person.id
  • 最终查询结果和原INNER JOIN完全一致

内容的提问来源于stack exchange,提问作者Evgeny Step

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:07