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

PostgreSQL:如何基于关联test_run表行过滤test_result表数据?

问题解决:关联test_run特定行的test_result查询

数组方式的语法修正

你报错的原因是:WITH子句定义的test_runs是一张临时表,而非单个列,直接用ANY(test_runs)会被数据库识别为列名,自然找不到。需要给数组列指定别名,再正确引用这个列:

正确写法1:子查询引用数组列

WITH test_runs AS (
  SELECT array(SELECT id FROM test_run) AS run_ids  -- 给数组列命名为run_ids
)
SELECT * FROM test_result 
WHERE test_run_id = ANY((SELECT run_ids FROM test_runs));

正确写法2:JOIN关联临时表

WITH test_runs AS (
  SELECT array(SELECT id FROM test_run) AS run_ids
)
SELECT tr.* FROM test_result tr
JOIN test_runs ON tr.test_run_id = ANY(test_runs.run_ids);

更高效的替代方案(无需数组)

实际业务中,直接用IN子查询或JOIN是更常规、性能更优的选择(数据库对这类语句有成熟的查询优化策略,能更好利用索引):

方案1:IN子查询

SELECT * FROM test_result
WHERE test_run_id IN (SELECT id FROM test_run);

方案2:JOIN关联(适合需要同时查询test_run表字段的场景)

SELECT tr.*
FROM test_result tr
JOIN test_run t ON tr.test_run_id = t.id;

注:如果只需筛选关联特定行(比如test_run满足某些条件),只需在子查询或JOIN的test_run表后加WHERE条件即可,例如:SELECT id FROM test_run WHERE status = 'completed'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:05:35