2010-07-29 65 views
15

是不是有一個原因MySQL不支持FULL OUTER JOINS?我已經在mysql中嘗試了完整的外連接語法,它從來沒有工作過,只是發現它不支持mysql,所以只是好奇爲什麼?是不是有原因MySQL不支持FULL OUTER JOINS?

+0

您可以投票支持此功能[在MySql](http://bugs.mysql.com/bug.php?id=18003&thanks=3¬ify=67) – 2012-06-11 14:43:11

回答

22

MySQL缺少很多其他數據庫具有*的功能。我認爲他們有大量的想法積累,沒有足夠的開發人員來實現它們。

此功能was requested在2006年仍未實施。我想它的優先級很低,因爲你可以通過將LEFT和RIGHT OUTER JOIN與UNION ALL結合來解決它。不愉快,但它有訣竅。更改此:

SELECT * 
FROM table1 
FULL OUTER JOIN table2 
ON table1.table2_id = table2.id 

這樣:

SELECT * 
FROM table1 
LEFT JOIN table2 
ON table1.table2_id = table2.id 
UNION ALL 
SELECT * 
FROM table1 
RIGHT JOIN table2 
ON table1.table2_id = table2.id 
WHERE table1.table2_id IS NULL 

*爲了公平起見到MySQL,他們也有很多其他的數據庫沒有的一些功能。

1

因爲它從來沒有被MySQL開發者實現。 爲什麼? 因爲沒有足夠的客戶壓力。

+2

+1雖然我懷疑這裏有因果關係,毫無疑問存在相關性,例如我懷疑'FULL OUTER JOIN'是許多MySql願望清單的頂部(對於記錄來說,我的頂部是實際檢查的'CHECK'約束)。 – onedaywhen 2010-07-29 13:18:19

0

隨着產品的成熟,每個版本都會增加更多功能。只是把它記錄下來直到尚未實現。我確信它最終會在那裏,但這並不意味着MySql不好或什麼都不好,每個數據庫都有額外的功能以及缺少的功能。我希望SQL Server具有MySql所具有的組連接功能!

4

我不相信MySQL開發者曾經說過爲什麼它可能很難實現的任何技術原因。

但是,像大多數DBMS一樣,MySQL在很多地方沒有完全實現ANSI標準。由於FULL OUTER JOIN是一個很少使用的功能,並且通常可以由UNION解決方法替代,所以修復它幾乎沒有任何壓力。

我建議將您的聲音添加到bug 18003

1

在大型系統中,我通常可能會使用一次或兩次FULL OUTER JOIN,所以對它沒有太大的需求,當然你可以很容易地解決它,並且可能更明確地讀取(如果你可以根據左/右結果來推斷派生列)和一個LEFT和RIGHT JOIN的聯合。