SQL:INNER JOIN在WHERE语句后不起作用?

时间:2016-08-04 22:20:11

标签: sql join where

我在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 ...然后在同一个查询中进行内连接。

2 个答案:

答案 0 :(得分:0)

不要构成语法规则。它不会起作用。

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

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

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

答案 1 :(得分:0)

我喜欢这个解决方案。完全有可能做到这一点,但我所做的WHERE陈述是错误的。应该是这样的:

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

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