MySQL Where 子句使用 2 LeftJoins(3 个表)错误
MySQL Where Clause Using with 2 LeftJoins (3 tables) ERROR
当我使用 2 个表进行一次连接时,一切都很好,但是在我不得不进行另一次连接之后:
SELECT logins.user as luser, rozliczenia.godziny as godziny, rozliczenia.stawka as stawka, rozliczenia.premia as premia, rozliczenia.premiainna as premiainna, SUM(sprzedane.liczba) as liczbasprz
FROM logins
LEFT JOIN rozliczenia
ON logins.id=rozliczenia.userid
AND DATE(rozliczenia.data) BETWEEN DATE('$rok-$mies-00') AND DATE('$rok-$mies-$daysinm')
LEFT JOIN sprzedane
ON logins.user=sprzedane.user AND DATE(rozliczenia.data) BETWEEN DATE('$rok-$mies-00')
WHERE luser!='SUPERUSER' AND luser!='agata' AND luser!='tomek'
一切都搞砸了:(有什么想法吗?
这是错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
'WHERE luser!='SUPERUSER' AND luser!='agata' AND luser!='tomek'' at line 1
编辑
这是没有变量的完整代码
SELECT logins.user as luser, rozliczenia.godziny as godziny, rozliczenia.stawka as stawka, rozliczenia.premia as premia, rozliczenia.premiainna as premiainna, SUM(sprzedane.liczba) as liczbasprz
FROM logins LEFT JOIN rozliczenia
ON logins.id=rozliczenia.userid AND DATE(rozliczenia.data) BETWEEN DATE('2015-1-00') AND DATE('2015-1-31')
LEFT JOIN sprzedane
ON logins.user=sprzedane.user AND DATE(rozliczenia.data) BETWEEN DATE('2015-1-00')
WHERE luser!='SUPERUSER' AND luser!='agata' AND luser!='tomek'
这一行:
ON logins.user=sprzedane.user AND DATE(rozliczenia.data) BETWEEN DATE('$rok-$mies-00')
应阅读:
ON logins.user=sprzedane.user AND somedate BETWEEN DATE('$rok-$mies-00') AND DATE(rozliczenia.data)
错误在倒数第二行
AND DATE(rozliczenia.data) BETWEEN DATE('$rok-$mies-00')
BETWEEN
的正确语法是
BETWEEN date1 AND date2
您有多个错误。我认为查询应该更像这样:
SELECT l.user as luser, r.godziny, r.stawka, r.premia,
r. premiainna, SUM(s.liczba) as liczbasprz
FROM logins l LEFT JOIN
rozliczenia r
ON l.id = r.userid AND
DATE(r.data) BETWEEN DATE('$rok-$mies-00') AND DATE('$rok-$mies-$daysinm') LEFT JOIN
sprzedane s
ON l.user = s.user AND
DATE(r.data) BETWEEN DATE('$rok-$mies-00') AND DATE('$rok-$mies-$daysinm') -- The AND part is a guess
WHERE l.user NOT IN ('SUPERUSER', 'agata', 'tomek')
GROUP BY l.user;
备注:
- 如果不更改列名,则不需要
as
。
- Table 别名使查询更易于编写和阅读。
- 使用
NOT IN
获取值列表。
- 最终,您需要
GROUP BY
进行聚合(除非您只想要一行)。
- 您不能在
WHERE
中使用 SELECT
中定义的列别名。
- 您应该使用参数化查询而不是字符串替换(虽然我没有做出那个改变)。
当我使用 2 个表进行一次连接时,一切都很好,但是在我不得不进行另一次连接之后:
SELECT logins.user as luser, rozliczenia.godziny as godziny, rozliczenia.stawka as stawka, rozliczenia.premia as premia, rozliczenia.premiainna as premiainna, SUM(sprzedane.liczba) as liczbasprz
FROM logins
LEFT JOIN rozliczenia
ON logins.id=rozliczenia.userid
AND DATE(rozliczenia.data) BETWEEN DATE('$rok-$mies-00') AND DATE('$rok-$mies-$daysinm')
LEFT JOIN sprzedane
ON logins.user=sprzedane.user AND DATE(rozliczenia.data) BETWEEN DATE('$rok-$mies-00')
WHERE luser!='SUPERUSER' AND luser!='agata' AND luser!='tomek'
一切都搞砸了:(有什么想法吗?
这是错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
'WHERE luser!='SUPERUSER' AND luser!='agata' AND luser!='tomek'' at line 1
编辑
这是没有变量的完整代码
SELECT logins.user as luser, rozliczenia.godziny as godziny, rozliczenia.stawka as stawka, rozliczenia.premia as premia, rozliczenia.premiainna as premiainna, SUM(sprzedane.liczba) as liczbasprz
FROM logins LEFT JOIN rozliczenia
ON logins.id=rozliczenia.userid AND DATE(rozliczenia.data) BETWEEN DATE('2015-1-00') AND DATE('2015-1-31')
LEFT JOIN sprzedane
ON logins.user=sprzedane.user AND DATE(rozliczenia.data) BETWEEN DATE('2015-1-00')
WHERE luser!='SUPERUSER' AND luser!='agata' AND luser!='tomek'
这一行:
ON logins.user=sprzedane.user AND DATE(rozliczenia.data) BETWEEN DATE('$rok-$mies-00')
应阅读:
ON logins.user=sprzedane.user AND somedate BETWEEN DATE('$rok-$mies-00') AND DATE(rozliczenia.data)
错误在倒数第二行
AND DATE(rozliczenia.data) BETWEEN DATE('$rok-$mies-00')
BETWEEN
的正确语法是
BETWEEN date1 AND date2
您有多个错误。我认为查询应该更像这样:
SELECT l.user as luser, r.godziny, r.stawka, r.premia,
r. premiainna, SUM(s.liczba) as liczbasprz
FROM logins l LEFT JOIN
rozliczenia r
ON l.id = r.userid AND
DATE(r.data) BETWEEN DATE('$rok-$mies-00') AND DATE('$rok-$mies-$daysinm') LEFT JOIN
sprzedane s
ON l.user = s.user AND
DATE(r.data) BETWEEN DATE('$rok-$mies-00') AND DATE('$rok-$mies-$daysinm') -- The AND part is a guess
WHERE l.user NOT IN ('SUPERUSER', 'agata', 'tomek')
GROUP BY l.user;
备注:
- 如果不更改列名,则不需要
as
。 - Table 别名使查询更易于编写和阅读。
- 使用
NOT IN
获取值列表。 - 最终,您需要
GROUP BY
进行聚合(除非您只想要一行)。 - 您不能在
WHERE
中使用SELECT
中定义的列别名。 - 您应该使用参数化查询而不是字符串替换(虽然我没有做出那个改变)。