1

これらのテーブルを作成する 2 つのサブクエリがあります。

 date      | name | data x
-----------+------+-------
2013-07-01 | a    |   2
2013-07-01 | c    |   3
2013-07-01 | d    |   1

 date      | name | data y
-----------+------+-------
2013-07-01 | a    |   13
2013-07-01 | b    |   16
2013-07-01 | d    |   20

結合基準として日付と名前の両方を使用して完全結合を実行したいと考えています。(日付は 2013-07-01 に限定されないため、実際には日付フィールドと名前フィールドを組み合わせて一意の疑似識別子フィールドを作成します。)

理想的には、結果は次のようになります。

 date      | name | data x | data y
-----------+------+--------+-------
2013-07-01 | a    |   2    |  13
2013-07-01 | b    |        |  16
2013-07-01 | c    |   3    |    
2013-07-01 | d    |   1    |  20

(ヌルにゼロを入れることができれば最高ですが、後で処理できます。)

次のようなクエリを使用しました。

select 
table1.date, table1.name, table1.dataX, table2.dataY
from table1
full join table2 on table1.date=table2.date and table1.name=table2.name

Postgres は、両方のテーブルに存在するフィールド (この例では a と c という名前の行のみ) のみを取り込みます。これは、完全な結合のポイントを実際に無効にします。

トラブルシューティングに別の方法を試しましたが、これまでのところうまくいった方法は次のとおりです。

select 
table1.date, table2.date, table1.name, table2.name, table1.dataX, table2.dataY
from table1
full join table2 on table1.date=table2.date and table1.name=table2.name

戻り値:

 date      |date        | name | name | data x | data y
-----------+------------+------+------+--------+-------
2013-07-01 | 2013-07-01 |  a   |   a  |   2    |  13
           | 2013-07-01 |      |   b  |        |  16
2013-07-01 |            |  c   |      |   3    |    
2013-07-01 | 2013-07-01 |  d   |   d  |   1    |  20

データを使用するときにこれを機能させるための回避策がありますが、実際には理想的ではありません。クエリが目的の結果を返すようにする方法はありますか?

ここでかなりの毛が抜けます。本当にありがとう!

4

1 に答える 1