2011-11-21 6 views
0

我有以下查詢:SQL連接即使沒有這樣的ID

SELECT * FROM 
    (
     SELECT 
     catalog.*, 
     images.image 
     FROM `catalog` as catalog 
     INNER JOIN `type5` as images ON catalog.id = images.id 
     WHERE catalog.left_key > (SELECT `left_key` FROM `catalog` WHERE `id`=235) AND catalog.right_key < (SELECT `right_key` FROM `catalog` WHERE `id`=235) 
     ORDER BY catalog.left_key ASC 
    ) ilv 

這個查詢效果很好,但只有在表是的Type5同一項目ID它僅選擇項目從目錄。

例如在目錄中,我有:

id name 
5 Hello 
7 World 
8 Foo 
9 Bar 

並於5型我: ID圖像

5 hello.png 
8 foo.png 
9 bar.png 

它將只選擇

5 Hello 
8 Foo 
9 Bar 

如何編輯我的查詢來選擇目錄中的項目,即使在type5中沒有相同的ID?

+0

你需要的是一個外連接。請參閱'join(sql)'上的wikipedia頁面。 – hochl

回答

7

您正在使用inner join,這意味着它只會得到兩個表中的項目。您可能正在尋找left outer join

如果你真的不知道如何加入工作,here是一個很好的視覺表示,它解釋它。

2
SELECT catalog.*, images.image 
FROM `catalog` as catalog 
LEFT JOIN `type5` as images 
    ON catalog.id = images.id 
WHERE 
    catalog.left_key > 
    (SELECT `left_key` FROM `catalog` WHERE `id`=235) 
    AND catalog.right_key < 
    (SELECT `right_key` FROM `catalog` WHERE `id`=235) 
ORDER BY catalog.left_key ASC 

我不知道什麼where子句試圖做...但得到的所有記錄,並從這些圖像在目錄中的相關記錄,LEFT JOIN是你所需要的。我也不明白什麼外部選擇是...

+0

我不明白,選擇外:) – hochl

2
SELECT * FROM 
(
    SELECT 
    catalog.*, 
    images.image 
    FROM `catalog` as catalog 
    ***LEFT OUTER*** JOIN `type5` as images ON catalog.id = images.id 
    WHERE catalog.left_key > (SELECT `left_key` FROM `catalog` WHERE `id`=235) 
    AND catalog.right_key < (SELECT `right_key` FROM `catalog` WHERE `id`=235) 
    ORDER BY catalog.left_key ASC 
) ilv 

此查詢將選擇您的目錄表與類型5表連接的所有記錄。如果在類型5表中沒有相同的ID,則將爲此類對選擇NULL值。

Hello - hello.png 
World - NULL 

的關鍵詞是LEFTOUTER。如果您需要替換目錄表中缺少的值,則可以使用RIGHT OUTER JOIN。 爲了使這一切同時工作 - 全外連接

相關問題