2015-12-13 35 views
1

我试图选择拥有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; 

但它给我这个错误:

Error: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'Inner Join Orders On Orders.UserID = Users.ID LIMIT 0, 25' at line 4


编辑想通了!

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

+0

如果可以的话,你应该张贴你的表只是结构,而不是数据。 – Gianmarco

+0

我该怎么做呢?创建表语句? –

+0

是或代码格式化表头是这样的: 表用户:'| ID | NAME | SURNAME |' – Gianmarco

回答

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); 
+0

#1064 - 你的SQL语法有错误;检查对应于您的MariaDB服务器版本的手册,以找到在第1行的WHERE RewardPoints> 50 AND Users.LastLoggedIn> DATE_SUB(NOW(),INTERVAL 3 MONT)附近使用的正确语法 –

+0

发布表格的完整结构 – Gianmarco

+0

're re big tables ...我会为你添加一个编辑! –

0

的WHERE语句应该来后的JOIN语句

+0

之前? –

+0

顺序是:SELECT FROM JOIN ON WHERE – Johannes

+0

好吧,似乎复制和粘贴的答案是更好的...... ;-) – Johannes

0

无论是移动,其中的JOIN后:

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;