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替代。不起作用:…用作表达式的子查询返回多行预期的输出格式是什么?