繁体   English   中英

使简单的自我加入更有效率

[英]making simple self join more efficent

我有一张桌子

id|level|name

等级可以是1,2或3

我想得到的是:

id|lvl1name|lvl2name|lvl3name

我正在使用以下查询

SELECT L1."name" as lvl1name, L2."name" as lvl2name, L3."name" as
lvl3name, L1.id
 FROM table as L1
       JOIN table as L2 ON L1.id = L2.id
       JOIN table as L3 ON L2.id = L3.id
       WHERE L1.lvl='1' and L2.lvl='2' and L3.lvl='3';

但它太慢了!

必须有更好的方法来做到这一点。 请帮忙

对于这个例子,我正在使用postgres,但我很乐意学习一些不依赖于数据库特性的方法。

我不能写程序(只读访问),我从视图中选择它。

使用:

  SELECT t.id,
         MAX(CASE WHEN t.level = 1 THEN t.name END) AS level1name,
         MAX(CASE WHEN t.level = 2 THEN t.name END) AS level2name,
         MAX(CASE WHEN t.level = 3 THEN t.name END) AS level3name
    FROM YOUR_TABLE t
GROUP BY t.id

如果您需要它是动态的,则需要使用动态SQL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM