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

如何在子查询SELECT语句中正确使用父表属性?

如何在子查询的SELECT语句中使用父表的属性

问题原因

你写的子查询里,records.parent_id = parent_id存在字段歧义——两个parent_id都指向子查询内部的records表字段,导致条件恒成立,最终统计了所有记录的总数。要引用父表的字段,必须给父表指定别名,明确区分层级。

解决方案

给父表Record设置别名(比如r),在子查询中通过别名引用父表的id字段,同时给统计结果指定别名total,方便后续获取数据:

Record.select('name, (SELECT COUNT(*) FROM records WHERE records.parent_id = r.id) AS total').from('records AS r')

如果用ActiveRecord的链式写法更直观:

Record.select(:name, Record.select('COUNT(*)').where('records.parent_id = records.id').as('total'))

结果验证

针对你的示例数据,执行上述查询后会得到预期结果:

[{name: 'Test A', total: 2}, {name: 'Test B', total: 2}, {name: 'Test C', total: 1}]

补充说明

  • 当子查询和父表使用同一张表时,必须通过别名区分表层级,否则数据库无法识别你要引用的是父表还是子查询内的表字段。
  • 你的示例逻辑是统计包含自身在内的所有关联节点(比如Test A的parent_id等于自己的id,所以统计到自身和Test B),如果只需要统计直接子节点,保持条件逻辑即可,当前写法完全匹配你的需求。

内容的提问来源于stack exchange,提问作者Jovanny Israel Zepeda Roque

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:24:56