2016-08-04 131 views
1

我在MySQL中有两个表格 - 它们与本例中的these非常相似。我想要做的事实际上是一回事,有一点不同。相反,这样的查询:SQL:INNER JOIN在WHERE语句后不起作用?

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 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID' at line 5

这段代码可以让我有一个表只是我想要的内容,并在那里我想要的INNER JOIN只是做了。我该怎么做呢?

要清楚:我想先选择WHERE ...,然后在同一个查询中执行内部连接。

回答

0

不构成语法规则。它不会工作。

在SQL的所有实现中,WHERE子句都会追踪全部查询中的表引用。

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

这有什么好做的RDBMS引擎选择优化行取的方式。 RDBMS将更改它访问表和行的顺序,以便为您优化。

+0

是的,就是这个问题。如果我将WHERE放在代码的末尾,它将起作用。感谢你的回答。我会尽快选择最佳答案。 –

0

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

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

这与完美的作品。很抱歉回答我自己的问题,但它可能会帮助其他人。