私は2つのテーブルtable
を持っていますが、構造は同じですが、異なるスキーマ(スキーマA
およびB
)に属しています。問題の行はすべてA.table
に表示されますが、B.table
に表示される場合と表示されない場合があります。 B.table
は、基本的にはA.table
のデフォルトの上書きです。これは素晴らしい作品COALESCEフィールドのソースを決定します
SELECT COALESCE(B.id, A.id) as id,
COALESCE(B.foo, A.foo) as foo,
COALESCE(B.bar, A.bar) as bar
FROM A.table LEFT JOIN B.table ON (A.id = B.id)
WHERE A.id in (1, 2, 3)
、私はまた、データのソースを追加したい:そのような私のクエリとして
は次のように、各フィールドにCOALESCEを使用しています。上記の例では、がB.table
に存在するものの、1または3は存在しないと仮定して、Aは1と3のソース、Bは2のソースです。
したがって、データは次のようになります私は本当に元の値が限り私はB.
からAを区別できるように私は(ないロングショットで)何pgsqlでの専門家ではありませんが、私が持っているもの気にしない、次の
+---------------------------------+
| id | foo | bar | source |
+---------------------------------+
| 1 | a | b | A |
| 2 | c | d | B |
| 3 | e | f | A |
+---------------------------------+
EXISTSとサブクエリでうんざりしていたが、今まで運がなかった。 (A.tableからの)デフォルト値を示すレコードとして
美しいです。シンプルだけど、私を逃れました。ありがとう。 – sberry
単純な 'COALESCE'式で' B.foo'がNULL(除外されていない)であれば、 'B.id IS NOT NULL'でも' foo'のソースは 'A'でも構いません。 –