2015-10-18 30 views
1

我一直的「完全外部聯接」一以下查詢:在MySQL的「完全外連接」中指定一個條件的目的是什麼?

SELECT Customers.CustomerName, Orders.OrderID 
FROM Customers 
FULL OUTER JOIN Orders 
ON Customers.CustomerID=Orders.CustomerID 
ORDER BY Customers.CustomerName; 

按我的知識的目的,「完全外部聯接」在MySQL的是從返回左表中的所有行(客戶)和右表(訂單)中的所有行。

如果「客戶」中的行中沒有「訂單」中的匹配項,或者「訂單」中的行中沒有「客戶」中的匹配項,那麼這些行也會列出。

我的疑問/查詢是否中的'Full Outer Join'MySQL將返回來自兩個表的行,而不考慮匹配元素,那麼是否需要在WHERE子句中指定條件?我不能跳過它嗎?

請給我規範和關於MySQL RDBMS的點答案。

謝謝。

+1

的沒有'FULL JOIN'在MySQL中,你不需要指定'WHERE'條款,雖然沒有什麼先天阻止你這樣做。 –

回答

3

當您指定WHERE子句中的東西,你必須確保,你檢查NULL值,也就像這樣:

... 
WHERE (col1 = 'whatever' OR col1 IS NULL) 
AND (col2 = 'other_value' OR col2 IS NULL) 
... 

如果不檢查NULLFULL OUTER JOIN實際上變成一個INNER JOINLEFT/RIGHT JOIN


如果你有一個錯字,並意味着「爲什麼ON子句中指定的條件?」,那麼答案是,沒有一個ON條款您JOIN實際上是CROSS JOIN,這將意味着,即每一行一個表與另一個表中的每一行相關聯,這是完全不同的事情。


爲了使這一答案更具體的MySQL,居然有在MySQL沒有FULL OUTER JOIN和你有LEFT JOIN ... UNION ... RIGHT JOIN效仿。但仍然適用相同的原則。

a left join b using (id) 
where b.col1 = 'x' 

相同

a inner join b using (id) 
where b.col1 = 'x' 

和你確實有它寫像

a left join b on a.id = b.id and b.col1 = 'x' 

真的有左連接。或課程

a left join b using (id) 
where b.col1 = 'x' or b.col1 is null 
+0

我總是被告知我有一個大腦袋。現在,這是在皮帶下方;-) –

+0

有趣的......所以通過使用'WHERE'子句,您隱式地承認對條件進行空檢查。 –

+0

我的一般感受和觀察是,這裏有大量的nubes,他們甚至不花5分鐘搜索SO或Google,只是在這裏拋出一個問題。所以我在結束問題方面感到高興,但我會稍微回退一點。感謝您的反饋。 –

相關問題