我有一個#tmp表,並且我需要從LEFT表和RIGHT表中找到具有匹配的名稱和覆蓋範圍的所有記錄。SQL JOIN:在匹配時從左和右表中返回行
-- select * from #tmp
--#tmp table
ID Name IsConverted Coverage EarliestPolicyEffectiveDate
1 abc 1 Test1 9/1/2017
2 abc 0 Test1 9/2/2017
3 abc 0 Auto 9/3/2017
4 xyz 0 Home 9/3/2017
-- select * from #tmp where IsConverted = 0
--LEFT TABLE
ID Name IsConverted Coverage
2 abc 0 Test1
3 abc 0 Auto
4 xyz 0 Home
-- select * from #tmp where IsConverted = 1
--RIGHT TABLE
ID Name IsConverted Coverage
1 abc 1 Test1
-- DESIRED RESULTS
ID Name IsConverted Coverage
1 abc 1 Test1
2 abc 0 Test1
-- CURRENT RESULTS
ID Name IsConverted Coverage
2 abc 0 Test1
select *
from
(SELECT * FROM #tmp tmp WHERE tmp.IsConverted = 0) nc
join
(SELECT * FROM #tmp tmp WHERE tmp.IsConverted = 1) ic on ic.Name = nc.Name and ic.Coverage = nc.Coverage
我需要能夠從左右兩個表中獲取匹配記錄。這是非常複雜的原因,並沒有爲這篇文章添加任何額外的信息。
我試過全外聯接,交叉應用,外部應用。沒有任何工作。
編輯:
最好我想使用JOIN,因爲一旦我找到匹配的結果,我仍需要訪問左表和右表,因爲我需要內確保LEFT.EarliestPolicyEffectiveDate 15天的RIGHT.EarliestPolicyEffectiveDate。
我不確定我能做到這一點,如果我做的聯盟。
像下面的例子:
select *
from
(SELECT * FROM #tmp tmp WHERE tmp.IsConverted = 0) nc
join
(SELECT * FROM #tmp tmp WHERE tmp.IsConverted = 1) ic on ic.Name = nc.Name and ic.Coverage = nc.Coverage
where
nc.EarliestPolicyEffectiveDate between DATEADD(d, -15, ic.EarliestPolicyEffectiveDate) and DATEADD(d, 15, ic.EarliestPolicyEffectiveDate)
爲什麼ID 2在您想要的結果,但不是ID 3或4? –
@TabAlleman沒有匹配的'Coverage'值 – Lamak
@Lamak看起來像它匹配我..'#tmp'到'left table'。 –