Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 联接表并用返回表值填充空列_Sql_Postgresql - Fatal编程技术网

Sql 联接表并用返回表值填充空列

Sql 联接表并用返回表值填充空列,sql,postgresql,Sql,Postgresql,我有两张桌子如下 TableA A_id name ---- ---- 123 Test1 124 Test2 125 Test3 126 Test4 TableB B_id fk_A_id value type_id ---- ------- ----- ------- 1 123 op1 1 2 123 hello 2 3

我有两张桌子如下

TableA
A_id    name
----    ----
123     Test1   
124     Test2
125     Test3
126     Test4

TableB
B_id    fk_A_id    value     type_id
----    -------    -----     -------
1       123        op1       1
2       123        hello     2
3       123        abc       3
4       126        op2       1
5       126        hello     2
6       126        def       3
我使用query连接这两个表

select TableA.A_id as id, TableA.name as name, TBL2.type_name as type_name
from TableA
full join (
select fk_A_id, value as type_name
from TableB
where type_id = 2
)TBL2 on TableA.A_id = TBL2.fk_A_id
返回的结果将是

id            name            type_name
--            ----            ---------
123           Test1           hello
124           Test2             
125           Test3
126           Test4           hello
我的问题是如何用'hello'填充空列,这是TableB的返回结果,type_id='2'将在该TableB上具有类似的字符串,我想您需要一个左连接,如下所示:

select a.A_id as id, a.name as name, b.type_name as type_name
from TableA a left join
     TableB b
     on a.A_id = b.fk_A_id and b.type_id = 2;
不需要子查询,而且完全联接是多余的

如果希望NULL值也为hello,请使用coalesce:

我想你想要一个左连接,像这样:

select a.A_id as id, a.name as name, b.type_name as type_name
from TableA a left join
     TableB b
     on a.A_id = b.fk_A_id and b.type_id = 2;
不需要子查询,而且完全联接是多余的

如果希望NULL值也为hello,请使用coalesce:


我不完全理解。为什么要用hello填充空列?您是否假设type_id=2总是返回hello?如果是这样的话,那将是另一个使用交叉联接的查询。是的,type_id=2的数据本身也将是“hello”,如果您知道它总是hello,为什么不直接使用hello呢?如果它是基于type_id的动态连接,那么应该使用交叉连接。但是,您的示例数据并不表明类型_id在每个值上总是相同的…是的,我理解您的意思,不知何故,数据库设计是几年前的事了,类型_id=2现在支持每次都是固定值,可能不会改变,在这种情况下,它不应该这样设计,但我必须查询它才能与其他表连接,并用“hello”填充空列。也许最简单的解决方案是,从表A中选择id、name、“hello”-如果您知道hello总是值,为什么还要查询它呢?我不完全理解。为什么要用hello填充空列?您是否假设type_id=2总是返回hello?如果是这样的话,那将是另一个使用交叉联接的查询。是的,type_id=2的数据本身也将是“hello”,如果您知道它总是hello,为什么不直接使用hello呢?如果它是基于type_id的动态连接,那么应该使用交叉连接。但是,您的示例数据并不表明类型_id在每个值上总是相同的…是的,我理解您的意思,不知何故,数据库设计是几年前的事了,类型_id=2现在支持每次都是固定值,可能不会改变,在这种情况下,它不应该这样设计,但我必须查询它才能与其他表连接,并用“hello”填充空列也许是最简单的解决方案,从表A中选择id、名称、“hello”-如果你知道hello总是值,为什么还要麻烦查询它?是的,尝试了你的查询,似乎给出了相同的结果,但我想用helloyes填充空列,尝试了你的查询,似乎给出了相同的结果,但我想用hello填充空列