簡體   English   中英

MySQL左聯接的行為類似於內部聯接

[英]MySQL Left Join behaving like Inner Join

這是我的查詢:

SELECT logins.user as user, 
       rozliczenia.godziny as godziny, 
       rozliczenia.stawka  as stawka, 
       rozliczenia.premia as premia, 
       rozliczenia.premiainna as premiainna 
  FROM logins 
       LEFT JOIN rozliczenia ON logins.id=rozliczenia.userid 
 WHERE user!='SUPERUSER' 
   AND user!='agata' 
   AND user!='tomek' 
   AND DATE(rozliczenia.data) BETWEEN 
          DATE('$rok-$mies-00') AND DATE('$rok-$mies-$daysinm')

在我的登錄名中:

bartosz
iza
grzegorz
slawek
pawel
michal

但在我的rozliczenia表格中,我只有:

bartosz
iza
grzegorz
slawek
pawel

左聯接應該從登錄表返回所有用戶,但是它像內部聯接一樣工作?

您的where子句將外部聯接變成內部聯接。 至少此子句可以:

 DATE(rozliczenia.data) BETWEEN DATE('$rok-$mies-00') AND DATE('$rok-$mies-$daysinm')

如果沒有匹配項,則失敗,因為dataNULL

您需要將第二個表上的所有條件移至on子句。 我不確定這是否是唯一的條件。

這將LEFT JOIN變成一個INNER

WHERE ... AND DATE(rozliczenia.data) BETWEEN ...

由於沒有“正確”結果的所有字段均為NULL,因此DATE(rozliczenia.data)將為NULL。

嘗試這個

SELECT logins.user as user, 
       rozliczenia.godziny as godziny, 
       rozliczenia.stawka as stawka, 
       rozliczenia.premia as premia, 
       rozliczenia.premiainna as premiainna 
FROM logins LEFT JOIN rozliczenia 
ON (logins.id=rozliczenia.userid) and
   DATE(rozliczenia.data) BETWEEN DATE('$rok-$mies-00') AND DATE('$rok-$mies-$daysinm')
WHERE user!='SUPERUSER' AND user!='agata' AND user!='tomek'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM