0

我的 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

谢谢

4

2 回答 2

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,而不是 join 本身。

于 2013-02-08T14:44:06.060 回答
1

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

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
于 2013-02-08T14:46:59.377 回答