2017-04-27 64 views
1

我有一個問題,加入2個表。這可能與交易「全連接」或「交叉連接」,但我不能讓它...JOIN問題2表

下面是一個簡單的例子: - 2014:在客戶端的「客戶端1」來公司 - 2015年:他的client_id正在改變(改變出現在#client表中) - 2016:他得到一輛奧迪轎車(變化出現在#car表中) - 2017:他用寶馬替換了他的奧迪(變更出現在#car表中)

我要的是一個查詢這給了我4行所有的變化和正確的日期,像這樣的畫面:

enter image description here

以防萬一,這裏是SQL代碼示例:

drop table #client 
drop table #car 

create table #client 
(
     client_name varchar(64), 
     client_id varchar(64), 
     date_validity_start date, 
     date_validity_end date 
) 

create table #car 
(
     client_name varchar(64), 
     car_brand varchar(64), 
     date_validity_start date, 
     date_validity_end date 
) 

insert into #client values('Client 1', 'A', '20140101', '20141231') 
insert into #client values('Client 1', 'B', '20150101', '20991231') 

insert into #car values('Client 1', 'Audi', '20160101', '20161231') 
insert into #car values('Client 1', 'BMW', '20170101', '20991231') 

你能pleasy幫助我嗎? 非常感謝!

+0

情況下爲什麼date_validity_end 2015年12月31日在輸出第2行?不應該是2099-12-31嗎? – Jerrad

回答

0


您可以使用下面的查詢

SELECT client_name, 
     client_id, 
     NULL AS car_brand, 
     date_validity_start, 
     date_validity_end 
FROM client 
UNION ALL 
SELECT client_name, 
     'B' AS client_id, 
     car_brand, 
     date_validity_start, 
     date_validity_end 
FROM car; 

讓我知道的任何問題

0
select client.client_name, 
     client.client_id, 
     null, 
     client.date_validity_start, 
     client.date_validity_end 
from #client client 
union 
select car.client_name, 
     client.client_id, 
     car.car_brand, 
     car.date_validity_start, 
     car.date_validity_end 
from #client client 
join #car car on client.client_name = car.client_name and 
       client.date_validity_start < = car.date_validity_start and 
       client.date_validity_end >= car.date_validity_end