我的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
由于
答案 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