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 中定义的列别名。
  • 您应该使用参数化查询而不是字符串替换(虽然我没有做出那个改变)。