【问题标题】:SQL: INNER JOIN won't work after WHERE statement?SQL:INNER JOIN 在 WHERE 语句之后不起作用?
【发布时间】:2016-08-05 06:41:42
【问题描述】:

我在 MySQL 中有两个表 - 它们与此示例中的 these 非常相似。我想做的几乎是同一件事,但有一点不同。而不是做这个查询:

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;

并选择整个该死的表,然后进行 INNER JOIN,我想这样做:

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
    FROM Orders
    ------> WHERE OrderDate = '1996-07-05'
    INNER JOIN Customers
    ON Orders.CustomerID=Customers.CustomerID;

顺便说一句,箭头只是为了帮助您发现差异。

但这不起作用。我收到以下错误:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 5 行的“INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID”附近使用正确的语法

那段代码将允许我拥有一个只包含我想要的内容的表格,并且 INNER JOIN 只在我想要的地方完成它。我该怎么做?

明确一点:我想先选择 WHERE...,然后在同一个查询中进行内部联接。

【问题讨论】:

    标签: sql join where


    【解决方案1】:

    我喜欢这个解决方案。这样做是完全有可能的,但是我所做的 WHERE 声明是在错误的位置上。应该是这样的:

    SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
        FROM Orders
        INNER JOIN Customers
        ON Orders.CustomerID=Customers.CustomerID
    ------> WHERE OrderDate = '1996-07-05';
    

    完美无缺。很抱歉回答了我自己的问题,但它可能对其他人有所帮助。

    【讨论】:

      【解决方案2】:

      不要编造语法规则。它行不通。

      在所有 SQL 实现中,WHERE 子句位于查询中的所有表引用之后。

      https://mariadb.com/kb/en/sql-99/select-statement/

      这与 RDBMS 引擎选择优化行获取的方式无关。 RDBMS 将更改它访问表和行的顺序以尝试为您优化。

      【讨论】:

      • 是的,这就是问题所在。如果我将 WHERE 放在代码的末尾,它将起作用。感谢你的回答。我会尽快选择最佳答案。
      猜你喜欢
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 2017-05-13
      • 1970-01-01
      • 2018-09-05
      • 2018-03-08
      相关资源
      最近更新 更多