我有一对多的关系。我有三张桌子:
|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。
我的一个想法是查询
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中的一个查询解决问题吗?
答案 0 :(得分:2)
看起来您需要“交叉表”或“数据透视”查询。有关对此有帮助的功能,请参阅tablefunc模块,并搜索[postgresql] crosstab
或[postgresql] pivot
的堆栈溢出。
SQL不允许您像上面所写的那样使用列引用作为列别名。它不是有效的语法,并且在使其工作时存在一些逻辑问题。