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填充空列