[英]Oracle Join 2 views with 5 conditions
我必須加入2個視圖view_a和view_b。
view_a具有列id,address1,address2,city,state,cntry view_b id,frst_name,last_name,type,date,job_title
理想的結果
id,名稱,地址1,地址2,城市,州,國家,職務
我查詢的條件是:
1.在id列上加入兩個視圖。
2.按日期排序
3.串聯first_name和last_name
4.類型等於“軍官”
5.如果有多名官員,則僅產生一名官員,即基於日期的第一行。
6.如果沒有人員,則結果中的name和job_title列的值為空。
我使用過的查詢:
select
*
from
view_a A
join
(
select
(first_name || ' ' || last_name) as name,
job_title,
id
from
view_b
where
type = 'officer'
and
id is not null
order by date desc fetch first 1 row only
) B
on A.id=B.id
但是此查詢僅產生一個結果。 我正在使用Oracle 12c。 這些視圖中大約有80萬條記錄。
你可以這樣做:
select id,
name,
address1,
address2,
city,
state,
cntry,
job_title
(select
a.id,
nvl2(nvl(b.first_name, b.last_name),b.first_name||' '||b.last_name,null) Name,
a.address1,
a.address2,
a.city,
a.state,
a.cntry,
b.job_title,
a.date
row_number() over (partition by a.id order by a.date desc nulls last) rn
from
view_a a left outer join
view_b b
on a.id = b.id
and b.type = 'officer')
where rn = 1
order by date desc nulls last;
以下還解決了該問題:
SELECT *
FROM view_a a
LEFT JOIN (SELECT name, job_title, id
FROM (SELECT (first_name || ' ' || last_name) AS name,
job_title,
id,
ROW_NUMBER() OVER(PARTITION BY id ORDER BY date DESC) rn
FROM view_b
WHERE TYPE = 'officer' AND id IS NOT NULL)
WHERE rn = 1) b
ON a.id = b.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.