2015-06-28 56 views
2

我有這樣的SQL查詢SQL查詢和OR運算

SELECT entries.*, categories.name as name_cat, areas.name as name_area, sub_categories.name as name_sub 
FROM entries, areas, sub_categories, categories 
WHERE sub_categories.id= entries.id_sub 
    AND **areas.id = entries.area** 
    AND categories.id = entries.id_cat 
ORDER BY entries.id DESC 

它的工作不錯,但我確實有entries.area一些空白領域..這是不是在未來的結果..

我試着查詢一些變化,但一些給我結果,而一些給予較少沒有給我適當的答案

+3

存儲NULL而不是空白,然後執行LEFT JOIN。 – jarlh

+0

@jarlh:嗨,好的,你能爲我寫一個LEFT連接查詢嗎? –

+0

請參閱下面的斯賓塞的答案。 – jarlh

回答

4

它已經是2015年。現在已經到了拋棄加入運算符的舊式逗號語法的時候了,並且使用關鍵字JOIN代替。通過JOIN關鍵字,我們可以將謂詞(條件)從WHERE子句移到ON子句。

使用JOIN關鍵字,我們可以通過添加其他關鍵字來指定「外連接」。

例如,包括關鍵字LEFT(在JOIN之前)指定查詢應該從「左側」表格中返回行,即使右側表格中不存在匹配行。

SELECT entries.* 
     , categories.name  AS name_cat 
     , areas.name   AS name_area 
     , sub_categories.name AS name_sub 
    FROM entries 
    LEFT 
    JOIN areas 
    ON areas.id = entries.area 
    LEFT 
    JOIN sub_categories 
    ON sub_categories.id= entries.id_sub 
    LEFT 
    JOIN categories 
    ON categories.id = entries.id_cat 
    WHERE 1=1 
    ORDER BY entries.id DESC 

WHERE 1=1可以省略......我把它只是用來說明哪些地方WHERE條款會去,如果我們需要一個。

+0

非常感謝:) –

+0

@ spencer7593。 。 。除了FROM子句中的逗號逗號之外,我還建議您也使用表別名,以便查詢更易於編寫和讀取。 –