gpt4 book ai didi

postgresql - 如何将垂直和水平表格连接在一起

转载 作者:行者123 更新时间:2023-11-29 12:18:04 25 4
gpt4 key购买 nike

我有两个表,其中一个是垂直表,即只存储表 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'

最佳答案

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

第二个问题可以用 LEFT [OUTER] JOIN 而不是 [INNER] JOIN 来避免。但是不用担心,第一个问题的解决方案是一个完全不同的查询。 "Pivot"T2 使用附加模块 tablefunc 中的 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 子句方便地删除了 empid 列的第二个实例。

详细说明:

关于postgresql - 如何将垂直和水平表格连接在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42031034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com