Postgresql表相交

时间:2013-02-08 14:41:39

标签: sql database postgresql

我的postgresql数据库中有两个表。 两个表都有相同的列。

我如何更喜欢tableA中非空的值?

TableA
id | name
1 | val_a_1
2 | val_a_2
3 | (null)

TableB
id | name
1 | (null)
2 | val_b_2
3 | val_b_3

我想得到的结果:

id | name
1 | val_a_1
2 | val_a_2
3 | val_b_3

现在我已经这样了,但它更复杂,因为有很多列。

SELECT *
CASE
WHEN TableA.name is NULL or  TableA.name = ''  
THEN (SELECT TableB.name FROM TableB where  TableB.id = 1)
ELSE TableA.name 
END 
AS name,
CASE
.
. another columns
.
END

由于

2 个答案:

答案 0 :(得分:2)

为什么不使用COALESCE 假设tableA中的所有recordID都出现在Table2上

SELECT  a.ID,
        COALESCE(a.name, b.name) AS "Name"
FROM    TableA a
        INNER JOIN TableB b
            ON a.ID = b.ID
  

COALESCE函数返回其第一个参数(可能有更多参数),这些参数不为空。

所有关于COALESCE,而不是连接本身。

答案 1 :(得分:1)

您可以对表中存在但不在表中的值使用完全外连接,反之亦然:

select coalesce(tableA.ID, tableB.ID) as ID,
 coalesce(tableA.Name, tableB.Name) as Name
from tableA full outer join tableB on tableA.ID = tableB.ID