【问题标题】:Select, where and then inner join two tables选择,在哪里,然后内连接两个表
【发布时间】:2016-03-19 03:27:28
【问题描述】:

我正在尝试选择得分超过 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' at 第 4 行


编辑想通了!

选择 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);

【问题讨论】:

  • 如果可以,您应该只发布表的结构,而不是数据。
  • 我该怎么做呢?创建表语句?
  • 是的,或者像这样的代码格式的表格标题:表格用户:| ID | NAME | SURNAME |

标签: mysql join


【解决方案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);

【讨论】:

  • #1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的“WHERE RewardPoints > 50 AND Users.LastLoggedIn > DATE_SUB(NOW(), INTERVAL 3 MONT”附近使用正确的语法
  • 发布表格的完整结构
  • 另外,你添加了一个标签“sql-server”,是mysql还是mssql?
  • 我已经更新了我的答案,请立即尝试,它应该可以工作。有一个额外的;
【解决方案2】:

在 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;

【讨论】:

    【解决方案3】:

    WHERE 语句应该出现在 JOIN 语句之后

    【讨论】:

    • 顺序为:SELECT FROM JOIN ON WHERE
    • 好吧,看来复制粘贴答案更好... ;-)
    猜你喜欢
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 2020-11-13
    相关资源
    最近更新 更多