首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何始终在空结果时返回行并在数组中使用IN子句

如何始终在空结果时返回行并在数组中使用IN子句
EN

Database Administration用户
提问于 2021-07-21 15:53:38
回答 1查看 1.5K关注 0票数 2

这里需要帮助。我正在使用PostgreSQL,并给出了一个类似于下面的查询(这是一个更大的查询的parat ),我需要它始终返回一行。

代码语言:javascript
复制
SELECT
    content,
    user_id,
    date,
    factor_id,
    team_id
FROM
    ANSWERS A
WHERE
    A.TEAM_ID IN ('7f4743df-5194-4ba4-8490-4b36ae63e27a', '8a4743df-5194-4ba4-8490-4b36ae63e27a')
    AND A.DATE >= '2020-10-22'::date
    AND A.FACTOR_ID IN ('0a577004-b283-410a-b245-bff019a8e70d', '0f577004-b283-410a-b245-bff019a8e54d')
ORDER BY
    USER_ID,
    DATE

基本上,当它找到team_id T和factor_id F的组合,其中给定日期没有结果时,我希望它返回实际的T和F项,user_id和date,如下所示:

(null,‘0000000-5194-4ba4-8490-000000000,'2020-10-22',’0a577004-b283-410a-b 245-bff019a8e70d‘,'0f577004-b283-410a-b245-bff019a8e54d')

在使用IN子句with数组返回当前结果为空的迭代时,有任何方法吗?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2021-07-21 18:18:42

你不能用身份列表来做这个。您必须使用一个值列表(S),并将其加入到A中,如下所示:

代码语言:javascript
复制
with b(team_id, factor_id) as (select * from (
   values ('7f4743df-5194-4ba4-8490-4b36ae63e27a'), ('8a4743df-5194-4ba4-8490-4b36ae63e27a'))t 
   cross join (
   values ('0a577004-b283-410a-b245-bff019a8e70d'), ('0f577004-b283-410a-b245-bff019a8e54d'))f
)
SELECT
    content,
    user_id,
    date,
    b.factor_id,
    b.team_id
FROM
    b left join ANSWERS A on a.factor_id=b.factor_id and a.team_id=b.team_id and A.DATE >= '2020-10-22';

现在,您将显示user_id和date返回的非空值,但我不知道它们来自何处。如果A中没有要从中提取它们的行,则不能从A中提取它们,也不能从IN/VALUES列表中提取它们,因为它们不包含这些字段。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/295965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档