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

如何筛选含type='X'组件的对象并保留其所有关联组件?

解决方法

有两种常用方式可以实现你的需求:既能筛选出关联了type='X'组件的对象,又能完整保留每个对象的所有关联组件:

方法一:子查询筛选目标对象ID

先从表B中提取所有关联了type='X'组件的对象ID,再基于这些ID关联表A和表B的全量数据并聚合:

SELECT A.*, ARRAY_AGG(B.*)
FROM A
INNER JOIN B USING(id)
WHERE A.id IN (
    SELECT id FROM B WHERE type = 'X'
)
GROUP BY A.*

方法二:EXISTS子句做存在性判断

通过EXISTS子句直接校验当前对象是否存在type='X'的组件记录,满足条件则保留该对象并关联所有组件:

SELECT A.*, ARRAY_AGG(B.*)
FROM A
INNER JOIN B USING(id)
WHERE EXISTS (
    SELECT 1 FROM B AS B2 WHERE B2.id = A.id AND B2.type = 'X'
)
GROUP BY A.*

这两种查询都会返回你预期的结果:仅保留id为1和3的对象,同时包含它们的所有关联组件。在你的SQLX Rust项目中,这两种写法均可直接使用(适配PostgreSQL等支持ARRAY_AGG的数据库)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:02:40