2017-10-04 59 views
0

伊夫目前有以下問題:SQL左連接中選擇第一個表一次

我有一個MySQL查詢:

SELECT account.id as id, `cname`, `username`, `state`, `dow` 
FROM account 
LEFT JOIN zeitplanung 
ON account.id = zeitplanung.user_id 
WHERE account.hide = 0 
and ifnull(zeitplanung.kw,43) = 43 
and ifnull(zeitplanung.year, 2017) = 2017; 

它返回的用戶名,併爲他們提到的值,萬一我」已經選擇了正確的年份和千位,並且如果連接表中沒有條目,它將返回表格帳戶中的值以及所有其他值,如NULL

但是它不返回用戶名,以防萬一表「zeitplanung」中沒有滿足cafeterias(kw,year)的條目。

如何做我必須編寫查詢:

  • 得到第二張表中所有條目的情況下匹配項存在
  • 獲得的情況下,用戶名和第二表項爲NULL的WHERE語句贏得」不適合。
+0

我使用的是默認的MySQL服務器,但據我所知,這樣的默認querys應bouth –

+0

樣本數據運行和預期結果對於一個有意義的答案會很有用, –

+0

http://i.epvpimg.com/6Qnfbab.png多數民衆贊成在表的屏幕。 例如kw = 40在上面的查詢中我會預期: http://i.epvpimg.com/0BmQdab.png和kw = 41的情況下我會除了bouth id | s,用戶名,cnames,但是其餘的數據爲NULL –

回答

1

問題是您正在篩選出WHERE子句中的NULL結果。爲了留住他們,移動的OUTER表的任何過濾條件,他們ON條款:

SELECT account.id as id, `cname`, `username`, `state`, `dow` 
FROM account 
LEFT JOIN zeitplanung 
ON account.id = zeitplanung.user_id 
AND zeitplanung.kw = 43 
AND zeitplanung.year = 2017 
WHERE account.hide = 0; 
+0

如果不過濾NULL,那麼這不意味着「內部連接」? –

+0

@WEI_DBA不,如果將條件移動到「ON」子句,如果它們不匹配,則「LEFT JOIN」將返回一個「NULL」。有了'WHERE'子句中的條件,'LEFT JOIN'仍然會返回'NULL',但是'WHERE'子句將會把它們過濾掉('JOIN'後執行'WHERE')。 – Siyual

+1

非常感謝,看起來類似於我的第一個查詢:D必須檢查differents 啊不同的是,你把哪裏加入,havnt知道這個作品:)非常感謝 –