MySQL Left Join表现得像Inner Join

时间:2015-10-07 22:03:59

标签: mysql join left-join inner-join right-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

左连接应该从登录表返回所有用户,但它的工作方式类似于内连接?

3 个答案:

答案 0 :(得分:3)

您的where子句正在将外部联接转换为内部联接。至少这个条款确实:

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

如果没有匹配项,则会失败,因为dataNULL

您需要将 second 表上的任何条件移动到on子句。我不确定这是否是唯一的这种情况。

答案 1 :(得分:2)

这会将LEFT JOIN变为INNER JOIN

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

由于没有“right”的结果将对所有字段都为NULL,DATE(rozliczenia.data)将为NULL。

答案 2 :(得分:1)

试试这个

where to_char(02573569, '00000000') = ponbr