2011-09-08 59 views
0

我有這個疑問:爲什麼我的完整連接查詢失敗?

SELECT *, default_insurance.company AS company 
FROM (default_insurance) 
JOIN default_gruppe_rel 
    ON default_gruppe_rel.uid = default_insurance.uid 
JOIN default_profiles 
    ON default_insurance.uid = default_profiles.id 
WHERE `kontakt` = '1' 

現在我得到的是一個結果,但如果我想要得到的結果,其中也有不參加比賽,只有通過改變第一連接類型,以FULL改變這種查詢像這

SELECT *, default_insurance.company AS company 
FROM (default_insurance) 
FULL JOIN default_gruppe_rel 
    ON default_gruppe_rel.uid = default_insurance.uid 
JOIN default_profiles 
    ON default_insurance.uid = default_profiles.id 
WHERE `kontakt` = '1' 

我得到一個錯誤說: 您的SQL語法錯誤;檢查與您的MySQL服務器版本對應的手冊,以便在第1行使用「FULL JOIN default_gruppe_rel ON default_gruppe_rel.uid = default_insurance.uid J」附近的正確語法。

這是爲什麼?是我的MYSQL版本未知的完全聯結?它已被棄用?

+0

在MySQL中沒有FULL OUTER JOIN,這是一個在這裏很好的主題。請參閱:[MySQL完全外部連接語法錯誤](http://stackoverflow.com/questions/2384298/mysql-full-outer-join-syntax-error) –

回答

2

MySQL不支持FULL JOINSee the MySQL docs瞭解用戶註釋中提供的幾個解決方法。

0

FULL JOIN僅適用於某些RDBMS ...嘗試LEFT OUTER JOIN/LEFT JOIN以獲取第一個表中的所有記錄以及後續表中的所有匹配。

您也可以嘗試一個CROSS JOIN,它不是一個真正的連接,而是返回'joined'表的笛卡爾積(即所有可能的組合)。

+0

'左'做了伎倆 - ty – Jakob

+1

-1,也@ Jakob,LEFT加入絕對不像完全加入! – Johan

+0

@Johan - 你會不會詳細說明,或者你會認爲閱讀手冊應該是相當明顯的:)? – Jakob

0
...LEFT JOIN... 
UNION ALL 
...RIGHT JOIN... 
+0

當然,你的意思是'UNION'而不是'UNION ALL'。 – onedaywhen

+0

@onedaywhen:是的,除非完整的外部聯接將用NULL檢查來捕獲任何一方的不匹配 – gbn