2017-07-11 12 views
1

複数のPostgreSQLテーブルに複数のデータソース(現時点では理論的には増加可能)があり、それぞれ異なるソースを比較するビューを作成したいエントリ。残念ながら、すべてのエントリはPostgres:複数の(部分的に)重複するデータソースを持つクエリ

は、現在私が使用しているクエリは、この

select [relevant_fields] from ((tableA full outer join tableB on 
    tableA.id=tableB.id) full outer join tableC on tableA.id=tableC.id) 
    full outer join tableD on tableD.id=tableA.id 

このクエリとの問題があるというエントリがテーブルにある場合はB、C、およびDが、同じようにフォーマットされているすべてのテーブルに表示されませんtableAではなく、データソースごとに1つずつ、3(ほとんどNULL)の行になります。私は、セカンダリテーブルにアップセーブすることでこれを行う方法があることを認識していますが、これらのテーブルの一部がかなり大きく、より大きなものになるので、select/viewで直接これを行う方法があるのだろうかと思っていました私は各レコードの複数のコピーが格納されているので、道路の下のメモリの問題に遭遇することはありません。

私の質問は、選択/表示内のエントリごとに1(できるだけ多くの場合)行を達成するために結合を構成する方法はありますか?

編集、サンプルデータ:

select [relevant_fields] 
from 
    tableA full join 
    tableB using(id) full join 
    tableC using(id) full join 
    tableD using(id); 

そして、あなたが望むようには動作するはずです:

Table A 
id | value 
1 | a 
2 | b 
3 | c 

Table B 
id | value 
1 | A 
3 | Z 

Table C 
id | value 
1 | Q 
4 | D 

Table D 
id | value 
1 | a 
3 | C 

Result 
id | val_A | val_B | val_C | val_D 
1 | a | A | Q | a 
2 | b | null | null | null 
3 | c | Z | null | C 
4 | null | null | D | null 
+1

あなたの質問に** [EDIT] **してくださいいくつかのサンプルデータとそのデータに基づいて予想される出力を追加してください。 [**フォーマットされたテキスト**](http://stackoverflow.com/help/formatting)、** **スクリーンショットはありません**(http://meta.stackoverflow.com/questions/285551/why-may -i-not-upload-images-of-code-on-so-asking-a-question/285557#285557)。 ** [編集] **あなたの質問 - コメントを投稿するコードや追加情報はありません**。 –

答えて

1

あなたのクエリの例を簡略化することができます。その場合

は、参照フィールドは、このように、表の別名を使用してそれらの名前を変更するために、あなたは可能性が別の名前がある場合:

select [relevant_fields] 
from 
    tableA as tableA(i,val_a) full join 
    tableB as tableB(i,val_b) using(i) full join 
    tableC as tableC(i,val_c) using(i) full join 
    tableD as tableD(i,val_d) using(i); 

をそしてそれはまた、列val_*の所望の名前を生成します。およそUSINGhereを読む

Example

+0

完全に動作するように見えますが、これまでにUSINGを実行していませんでした。 –

関連する問題