如何将表和表连接起来

时间:2017-02-03 18:46:12

标签: postgresql join jointable entity-attribute-value

我有两个表,其中一个是垂直的,即只存储来自表1的ref id的键值对。我想将表和显示键值对作为select中的列连接。并且还在几个键上执行排序。 T1有(id,empid,dpt) T2有(empid,key,value)

select 
    T1.*,
    t21.value,
    t22.value,
    t23.value,
    t24.value

from    Table1 t1
join    Table2 t21 on t1.empid = t21.empid
join    Table2 t22 on t1.empid = t22.empid
join    Table2 t23 on t1.empid = t23.empid

where   
        t21.key = 'FNAME'
    and t22.key = 'LNAME'
    and t23.key='AGE'

1 个答案:

答案 0 :(得分:1)

您演示的查询效率非常低(每列的另一个连接)并且还存在潜在问题:如果T2中的中的每个键都没有行{1}}子句,排除整行。

使用WHERE代替LEFT [OUTER] JOIN可以避免第二个问题。但是不要打扰,第一个问题的解决方案是一个完全不同的查询。使用[INNER] JOIN

“透视”T2
crosstab()

然后加入SELECT * FROM crosstab( 'SELECT empid, key, value FROM t2 ORDER BY 1' , $$VALUES ('FNAME'), ('LNAME'), ('AGE')$$ -- more? ) AS ct (empid int -- use *actual* data types , fname text , lname text , age text); -- more?

T1

这次您可能想要使用select * from t1 JOIN (<insert query from above>) AS t2 USING (empid);

[INNER] JOIN子句可以方便地删除USING列的第二个实例。

详细说明: