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 table 我只有:
bartosz
iza
grzegorz
slawek
pawel
左连接应该 return 来自登录 table 的所有用户,但它像内部连接一样工作吗?
这会将 LEFT JOIN 变成 INNER
WHERE ... AND DATE(rozliczenia.data) BETWEEN ...
由于没有 "right" 的结果的所有字段都为 NULL,因此 DATE(rozliczenia.data)
将为 NULL。
您的 where
子句正在将外部连接转变为内部连接。至少这个条款:
DATE(rozliczenia.data) BETWEEN DATE('$rok-$mies-00') AND DATE('$rok-$mies-$daysinm')
当没有匹配时,则失败,因为data
是NULL
。
您需要将 second table 上的所有条件移至 on
子句。我不确定这是否是唯一的条件。
试试这个
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'
这是我的查询:
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 table 我只有:
bartosz
iza
grzegorz
slawek
pawel
左连接应该 return 来自登录 table 的所有用户,但它像内部连接一样工作吗?
这会将 LEFT JOIN 变成 INNER
WHERE ... AND DATE(rozliczenia.data) BETWEEN ...
由于没有 "right" 的结果的所有字段都为 NULL,因此 DATE(rozliczenia.data)
将为 NULL。
您的 where
子句正在将外部连接转变为内部连接。至少这个条款:
DATE(rozliczenia.data) BETWEEN DATE('$rok-$mies-00') AND DATE('$rok-$mies-$daysinm')
当没有匹配时,则失败,因为data
是NULL
。
您需要将 second table 上的所有条件移至 on
子句。我不确定这是否是唯一的条件。
试试这个
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'