我在Postgres一点也不熟练。限制是:我正在使用其他人的数据库,因此无法更改表。Postgres 8.3.3,不允许升级。从Windows通过pgAdmin III访问数据库。
我遇到了一个快累死我的块。如果一个表中的值在关联表中不存在,我就根本没有返回。桌子
B
具有数字列(
C_id
)引用数字列的(
id
)在表中
C
但在表中是可选的
B
,所以可以
0
以指示空。中没有0记录
C.id
.
我想从表中选择一个完整的列表
B
用表中的标签替换数值
C
。只要有匹配的号码,这就可以工作,但如果
B.C_id = 0
我对那张唱片一无所知。So表格
B
有66排,但其中11排
C_id = 0
所以我的输出只有55行。
WHERE B.C_id = C.id
匹配表似乎排除了不匹配的行(
B、 id=0(_id)
)但如果我省略它,结果会将66个记录表循环成1300多行输出(将两个表的行相乘)。我的搜索结果显示
COALESCE
或
LEFT JOIN
应该有效,但是
聚结
不改变输出。我猜是因为断开了
0
不
NULL
。我无法获得任何可供使用的语句
左连接
或
CASE
.
更为复杂的是,这两个表都是从另一个表中寻址的。结构的简化示例:
Table A: (id, label, B_id)
Table B: (id, label, C_id)
Table C: (id, label)
全部的
身份证件
字段是数字,标签是文本。中的所有记录
A.B_id
包含非零数,但
B.C_id
可能包含
0
。具有的任何表中都不存在行
id = 0
.
我希望输出如下:
A.label, C.label
或者,使用
B.C_ID = 0
:
A.label, 'none'