0

私は一対多の関係を持っています。私は3つのテーブルを持っています:

|A       |  | B                |  |C      |
|ID| ... |  |ID|A_ID|C_ID|VALUE|  |ID|NAME|
|1 |     |  |1 |1   |2   |val_1|  |1 |a   |
|2 |     |  |2 |1   |1   |val_2|  |2 |b   |
|3 |     |  |3 |2   |1   |first|  |
...

結果テーブルを取得する必要があります:

|ID|a    |b    |
|1 |val_2|val_1|
|2 |NULL |NULL |
|3 |first|NULL |

つまり、最初の列は A.ID で、その他は B の VALUE 列ですが、これらの列の名前は C の NAME です。

私のアイデアの1つはクエリでした

SELECT A.ID, B.VALUE AS C.NAME FROM A, B, C WHERE B.A_ID = A.ID AND B.C_ID = C.ID

しかし、私は持っています:

ERROR:  syntax error at or near "."

PostgreSQL 8.4 の 1 つのクエリで問題を解決する方法を知っている人はいますか?

4

1 に答える 1

2

「クロス集計」または「ピボット」クエリが必要なようです。これに役立ついくつかの関数についてはtablefuncモジュールを参照し、スタック オーバーフローで[postgresql] crosstabまたはを検索します[postgresql] pivot

SQL では、上記のように列参照を列エイリアスとして使用することは許可されていません。これは有効な構文ではなく、機能させるにはいくつかの論理的な問題があります。

于 2013-07-14T06:47:26.417 に答える