[英]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.