【问题标题】:PostgreSQL: Sub-Query on one tablePostgreSQL:一张表上的子查询
【发布时间】:2021-03-01 17:57:16
【问题描述】:

我的表看起来(简化)如下:

ID, File, Subst_ID
1, "AAA"
2, "BBB", 3
3, "CCC"

它记录文件名“文件”;有时,一个文件(此处为 BBB)被一个较新的文件(此处为 CCC)替换。 首先显示所有已被替换的记录:

SELECT ID, File, Subst_ID FROM Table WHERE Subst_ID IS NOT NULL;

好的,打开第 2 行。现在我需要添加一个子查询列 QQ,它显示了替代记录的文件,例如应该带:

2, "BBB", 3, "CCC"

。我的方法不起作用:

SELECT ID, File, Subst_ID, (SELECT File FROM Table WHERE Subst-ID = ID) AS QQ FROM Table WHERE Subst_ID IS NOT NULL;

我的错误在哪里?谢谢!

【问题讨论】:

  • 能有替代品的替代品吗?
  • “不工作”不是有效的 Postgres 错误消息。
  • 替代替代:是的,BBB 现在被 CCC 替代了,这永远不会改变。但下周 CCC 可能会被 DDD 取代。
  • 不起作用:...用作表达式的子查询返回多行
  • 预期的输出格式是什么?

标签: sql postgresql subquery inner-join self-join


【解决方案1】:

我想你想要一个自我加入:

select t1.*, t2.file as subst_file
from mytable t1
inner join mytable t2 on t2.id = t1.subst_id

这是您要编写的查询 - 我发现它不太整洁,因为它需要一个 where 子句,而上面不需要:

select t1.*,
    (select t2.file from mytable t2 where t2.id = t1.subst_id) as subst_file
from mytable t1
where t1.subst_id is not null

【讨论】:

    猜你喜欢
    • 2022-12-07
    • 2013-07-19
    • 2023-03-16
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多