通过子查询中的 id 列表选择条目?

Posted

技术标签:

【中文标题】通过子查询中的 id 列表选择条目?【英文标题】:Select entries by list of ids from subquery? 【发布时间】:2019-03-27 05:50:06 【问题描述】:

PostgreSQL 数据库中我提出这样的SQL 请求:

SQL

SELECT 
    ARRAY_AGG (QUESTION_ID) AS QUESTIONS 
FROM 
    factors_questions_relationship 
WHERE 
    FACTOR_ID IN (SELECT ARRAY_AGG (FACTOR_ID) AS FACTORS 
                  FROM surveys_factors_relationship 
                  WHERE SURVEY_ID = '9bef1274-f1ee-4879-a60e-16e94e88df38');

错误

此 SQL 请求引发错误: SQL 错误 [42883]:错误:运算符不存在:整数 = 整数 [] 没有运算符与给定的名称和参数类型匹配。您可能需要添加显式类型转换。

第二个子查询返回id列表:2,10,12,44,52。我想在主查询中使用该 ID 列表。如何正确制作?

【问题讨论】:

【参考方案1】:

你可以试试下面-

SELECT ARRAY_AGG (QUESTION_ID) AS QUESTIONS FROM factors_questions_relationship 
where FACTOR_ID IN 
(
   SELECT FACTOR_ID AS FACTORS FROM surveys_factors_relationship 
   WHERE SURVEY_ID = '9bef1274-f1ee-4879-a60e-16e94e88df38'
)

【讨论】:

您好!我现在测试了你的代码。不幸的是,它引发了错误:SQL Error [42803]: ERROR: aggregate functions are not allowed in WHERE。您还有其他想法吗? 我不知道为什么,但您的代码返回空结果。事实上,如果我发出这样的 sql 请求 SELECT ARRAY_AGG (QUESTION_ID) AS QUESTIONS FROM factors_questions_relationship WHERE FACTOR_ID IN (2,10,12,44,52) 我会得到像 7,8,9,10,11,12,39,40,41,42,43,47,48 这样的结果,这是正确的。你怎么看? @NurzhanNogerbek,我已经编辑了答案 - 你现在可以查看

以上是关于通过子查询中的 id 列表选择条目?的主要内容,如果未能解决你的问题,请参考以下文章

通过 LEFT JOIN 优化 SQL 子查询

MySQL:按日期选择前 5 个和后 5 个条目,1 个查询,没有子查询

如何查询子数组中的条目与所有条件匹配的文档?

EF6 Linq 查询。仅包括返回子表的第一个条目

不使用EXISTS引入子查询时,选择列表中只能指定一个表达式--sql中的错误

Laravel 条件子查询与相关模型最后一个条目