选择,在哪里然后内部连接两个表

时间:2015-12-13 16:53:49

标签: mysql join

我试图选择拥有50分以上并在过去3个月内登录的用户。然后,我想要使用两个表中的ID来加入这些用户,这样我就可以在上面的查询返回的每个用户附加订单表行。

这是我的疑问:

SELECT  Users.EmailAddress, Users.RewardPoints, Orders.UserID, Users.ID From Users
WHERE RewardPoints > 50 AND Users.LastLoggedIn > DATE_SUB(NOW(), INTERVAL 3 MONTH)
Inner Join Orders ON Orders.UserID = Users.ID;

但它给了我这个错误:

  

错误:#1064 - 您的SQL语法出错;查看与MariaDB服务器版本对应的手册,以获得在“内部联接订单”附近使用的正确语法       On Orders.UserID = Users.ID LIMIT 0,25'在第4行

编辑想出来了!

SELECT Users.EmailAddress,Users.RewardPoints,Orders.UserID,Users.ID, 来自用户 在Orders.UserID = Users.ID上的INNER JOIN订单 WHERE Users.RewardPoints> 50 AND Users.LastLoggedIn> DATE_SUB(NOW(),INTERVAL 3 MONTH);

3 个答案:

答案 0 :(得分:1)

你不能在where条件之后加入表格,你应该把它放在最后(在你的情况下)。

SELECT  Users.EmailAddress, Users.RewardPoints, Orders.UserID, Users.ID
FROM Users 
INNER JOIN Orders On Orders.UserID = Users.ID
WHERE RewardPoints > 50 AND Users.LastLoggedIn > DATE_SUB(NOW(), INTERVAL 3 MONTH);

答案 1 :(得分:0)

WHERE语句应该在 JOIN语句之后

答案 2 :(得分:0)

在JOIN之后移动WHERE:

select ...
from ...
join ...
where ...

或使用内部查询:

SELECT  Users.EmailAddress, Users.RewardPoints, Orders.UserID, Users.ID
From (select ^ from Users
  WHERE RewardPoints > 50 AND Users.LastLoggedIn > DATE_SUB(NOW(), INTERVAL 3 MONTH)) Users
Inner Join Orders
  On Orders.UserID = Users.ID;