我是postgresssql的新手。 我有两张这样的表
表A
id |value | type1 | type2 | type3
bigint |text | bigint | bigint | bigint
表B
Id | description
bigint | text
表A< type1,type2,type3是表B的ID,但是不是外键约束。
我必须像这样检索
Select a.id,
a.value,
b.description1(as of a.type1),
b.description1(as of a.type1),
b.description1(as of a.type1)
答案 0 :(得分:1)
如果您需要多列,则应考虑更改数据库设计
表A
id | value
1 | <something>
2 | <something>
TableAType
id | TableA.id | type_id | typeValue
1 | 1 | type1 | bigint
2 | 1 | type2 | bigint
3 | 1 | type3 | bigint
.....
4 | 1 | typeN | bigint
TableB(type_description)
Id | description
bigint | text
然后,您的查询变得更加简单,并且在添加/删除类型时不会受到影响。
SELECT TB.Description, TT.TypeValue
FROM TableAType TT
JOIN TableB TB
ON TT.Type_id = TB.id
然后您可以使用PIVOT获取表格数据。再一个优点是你可以删除删除类型,并且你的查询没有改变,只需要更新类型表。
答案 1 :(得分:0)
你应该(LEFT)JOIN tableB 3次,并为每一个使用不同的别名。
select id, value,
type1, t1.description descri1,
type2, t2.description descri2,
type3, t3.description descri3
from tableA ta
left join tableB t1
on ta.type1 = t1.id
left join tableB t2
on ta.type2 = t2.id
left join tableB t3
on ta.type3 = t3.id;