сделать простое самостоятельное объединение более эффективным - PullRequest
3 голосов
/ 26 октября 2010

у меня есть стол

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, но я был бы рад узнать, как это не зависит от базы данных.

Я не могу написать процедуры (доступ только для чтения), и я выбираю это из представления.

1 Ответ

6 голосов
/ 26 октября 2010

Использование:

  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 .

...