簡體   English   中英

使用PostgreSQL的條件查詢聯接

[英]Conditional join of query using PostgreSQL

我有一種情況,我需要在每個函數變量的聯接中運行不同的查詢

目前,我具有以下功能:

CREATE OR REPLACE FUNCTION a(type_f boolean)
  RETURNS SETOF rowtypes AS
$$
declare row rowtypes ;
begin   
....
select...
from..
left join (select pp.a, avg(ppp.priceusd) as avgpricetf
           from pp
           join p on (p.b=pp.b)
           join (...) as ppp on (pp.c=p.c)
           group by pp.a) tfquery on (tfquery.a=main.a)
....
end;
$$
  LANGUAGE plpgsql VOLATILE

這很好。

我想對其進行修改,以便當type_f=True此查詢將在原始查詢的聯接instad中運行:

left join (select pp.a,p.d, avg(ppp.priceusd) as avgpricetf
           from pp
           join p on (p.b=pp.b)
           join (...) as ppp on (pp.c=p.c)
           group by pp.a,p.d) tfquery on (tfquery.a=main.a and tfquery.d=main.d)

如您所見,查詢以及聯接本身的條件已更改。

基本上

type_f=False請執行以下操作:

left join (select pp.a, avg(ppp.priceusd) as avgpricetf
           from pp
           join p on (p.b=pp.b)
           join (...) as ppp on (pp.c=p.c)
           group by pp.a) tfquery on (tfquery.a=main.a)

時間: type_f=True執行:

left join (select pp.a,p.d, avg(ppp.priceusd) as avgpricetf
           from pp
           join p on (p.b=pp.b)
           join (...) as ppp on (pp.c=p.c)
           group by pp.a,p.d) tfquery on (tfquery.a=main.a and tfquery.d=main.d)

我怎樣才能做到這一點?

您可以使用如下邏輯來殺死查詢的所有可能的可讀性並獲得預期的結果:

Select *
from A
left outer join
   ( select * from B where type_f
     union all
     select *, A.field from C where not type_f
   ) X
on X.n = A.n and X.field = A.field
....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM