0

postgresql データベースに 2 つのテーブルがあります。両方のテーブルに同じ列があります。

null ではない 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 関数は、 null ではない最初の引数 (さらに多くの引数がある場合があります) を返します。

COALESCE結合そのものではなく、 がすべてです。

于 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 に答える