2016-05-28 41 views
0
SELECT MP.* 
FROM SurveyFrontend..WebResult WR 
JOIN MeetingHistory MH 
ON MH.WebResultID=WR.WebResultID 
JOIN Meeting M 
ON MH.MeetingID=M.MeetingID 
JOIN MeetingPlanner MP 
ON MP.MeetingPlannerID=M.MeetingPlannerID 
WHERE PrimaryEntityID=2424 
AND WR.TimeResultTaken>='1/1/2016' 
AND CardSet=2 

我查了一下,但找不到任何有關如何用多個連接完成外部連接的示例。我想拉上面的查詢完全相反。使用多個連接語句完成外部連接的邏輯是什麼?

我該怎麼做呢?

這正是我在尋找:

SQL FULL OUTER JOIN

更新代碼:

SELECT MP.* 
FROM SurveyFrontend..WebResult WR 
FULL OUTER JOIN MeetingHistory MH 
ON MH.WebResultID=WR.WebResultID 
FULL OUTER JOIN Meeting M 
ON MH.MeetingID=M.MeetingID 
FULL OUTER JOIN MeetingPlanner MP 
ON MP.MeetingPlannerID=M.MeetingPlannerID 
WHERE PrimaryEntityID=2424 
AND WR.TimeResultTaken>='1/1/2016' 
AND CardSet=2 
AND (MH.WebResultID IS NULL 
OR MH.MeetingID IS NULL 
OR MP.MeetingPlannerID IS NULL 
OR WR.WebResultID IS NULL 
OR M.MeetingID IS NULL 
OR M.MeetingPlannerID IS NULL) 
+2

替換JOIN'這裏的'所有實例(其是隱含一個'INNER JOIN')與'FULL OUTER JOIN','WHERE'安亞鍵(一個或多個)是'NULL'或任何乙鍵是'NULL'。語法顯示在您裁剪的圖像中:http://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg –

+0

我知道這一部分,但我不知道要在WHERE子句中放置什麼。謝謝你! – juice

+0

哦nvm,你編輯了你的評論。讓我試試看。 – juice

回答

1

full outer join收益匹配on條件從左表中的所有行,所有行構成不符合條件右表中所有來自右表的不匹配條件的行。任何where限制將full outer join減小到leftrightinner join。一些例子:

create table #a(id int, name varchar(10)) 
insert #a values (1,'test1'),(2,'test2'),(3,'test3') 
create table #b(id int, name varchar(10)) 
insert #b values (1,'test1'),(4,'test4'),(5,'test5') 

select a.id aid,a.name aname, b.id bid,b.name bname 
from #a a full outer join #b b on a.id=b.id 

--same as left join 
select a.id aid,a.name aname, b.id bid,b.name bname 
from #a a full outer join #b b on a.id=b.id 
where a.id=2 

--same as right join 
select a.id aid,a.name aname, b.id bid,b.name bname 
from #a a full outer join #b b on a.id=b.id 
where b.id=4 

--same as inner join 
select a.id aid,a.name aname, b.id bid,b.name bname 
from #a a full outer join #b b on a.id=b.id 
where a.id=1 and b.id=1 

--same as inner join better example 
select a.id aid,a.name aname, b.id bid,b.name bname 
from #a a full outer join #b b on a.id=b.id 
where a.id = b.id 
+1

Where子句中的'null爲空'的測試並不總是將完全外部縮減爲左連接,右連接或內連接。特別是'LeftPK爲null或RightPK爲null'給出了沒有匹配的兩側的行。 –