2014-09-05 6 views
1

Может кто-нибудь покажет мне, как улучшить приведенный ниже запрос и сделать его одним утверждением вместо двух утверждений? БлагодаряКак улучшить запрос postgresql?

CREATE LOCAL TEMP TABLE tmpdetail2 
WITH (OIDS) 
ON COMMIT DROP as 
    select d2.detailid, d2.objid, d2.p 
    from _detail d2       
    where d2.detailid in (19, 106); 

    select distinct d.detailid, d.p, d.pval, d.objid 
    from _detail d 
    left join tmpdetail2 d2 
    on d.objid = d2.objid 
    where d2.objid is null 
    and d.p not in(select p from tmpdetail2) 
    order by p asc, d.detailid asc; 
+2

Что случилось с ним - что вы вы стремитесь улучшить? Что он должен делать? (Примеры данных? Объяснение?). Почему таблица temp создается с помощью «oids»? Версия PostgreSQL? –

ответ

2

Используйте common table expression:

with tmpdetail2 as (
    select d2.detailid, d2.objid, d2.p 
    from _detail d2       
    where d2.detailid in (19, 106) 
) 
select distinct d.detailid, d.p, d.pval, d.objid 
from _detail d 
left join tmpdetail2 d2 
    on d.objid = d2.objid 
where d2.objid is null 
    and d.p not in(select p from tmpdetail2) 
order by p asc, d.detailid asc; 
+0

спасибо @a_horse, я удалил первую точку с запятой, и она отлично работала. – fs2050

+0

@ fs2050: спасибо, это была ошибка копирования и вставки. Исправлена. –

Смежные вопросы