PostgreSQL:一个表上的子查询

PostgreSQL:一个表上的子查询,sql,postgresql,subquery,inner-join,self-join,Sql,Postgresql,Subquery,Inner Join,Self Join,我的表格看起来(简化)如下: ID, File, Subst_ID 1, "AAA" 2, "BBB", 3 3, "CCC" 它记录文件名“File”;有时,一个文件(这里是BBB)被一个新的文件(这里是CCC)替换。 首先显示已替换的所有记录: SELECT ID, File, Subst_ID FROM Table WHERE Subst_ID IS NOT NULL; 好的,打开第2行。现在我需要添加一个子查询列QQ,它显示

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

ID, File, Subst_ID
1, "AAA"
2, "BBB", 3
3, "CCC"
它记录文件名“File”;有时,一个文件(这里是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;

我的错在哪里?谢谢!

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

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

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