2015-10-14 83 views
0

所以我一直试图找出一段时间。我一直收到“ERROR 1064(42000):您的SQL语法错误;检查与您的MYSQL服务器版本相对应的手册,以便在Details附近使用正确的语法ON Order.OrderID = Order Details .OrderID LEFT JOIN Products O`在第8行“ 我的所有尝试找到错误都让我无能为力。我一直在重读我的书,只是为了看看我是否错过了一些东西,但我找不到任何东西。所以任何帮助/解释是非常感谢。错误1064在查看代码

这是我的sql代码到目前为止。

CREATE VIEW ORDERS AS 

SELECT 
    Orders.OrderID, 
    Orders.OrderDate, 
    `Order Details`.ProductID, 
    `Order Details`.UnitPrice, 
    `Order Details`.Quantity, 
    `Order Details`.Quantity * `Order Details.UnitPrice as Total, 
    Products.ProductName, 
    Customers.CompanyName 

FROM Orders 

    LEFT JOIN Employees ON Employees.EmployeeID = Orders.EmployeeID 

    LEFT JOIN Customers ON Customers.CustomerID = Orders.CustomerID 

    LEFT JOIN `Order Details` ON Orders.OrderID = `Order Details`.OrderID 

    LEFT JOIN Products ON Products.ProductID = `Order Details`.ProductID; 

回答

0

您的反引号不平衡(正如您可以在您的问题中看到阴影所示)。首先,我鼓励你避免命名表和列,使得它们的名字需要转义(即避免保留字并仅使用字母数字字符和下划线)。

此外,您的视图名称需要与表名称不同。

您的查询更容易编写和使用表别名阅读:

CREATE VIEW OrdersWithProducts AS 
    SELECT o.OrderID, o.OrderDate, 
      od.ProductID, od.UnitPrice, od.Quantity, 
      (od.Quantity * od.UnitPrice) as Total, 
      p.ProductName, c.CompanyName 
    FROM Orders o LEFT JOIN 
     Employees e 
     ON e.EmployeeID = o.EmployeeID LEFT JOIN 
     Customers c 
     ON c.CustomerID = o.CustomerID LEFT JOIN 
     `Order Details` od 
     ON o.OrderID = od.OrderID LEFT JOIN 
     Products p 
     ON p.ProductID = od.ProductID; 
+0

对不起的命名规则不能被改变,因为它是一所学校的做法服务器,所以我不得不在名称上没有发言权。不过,我会记住,当我做我自己的服务器。另外我不能相信我错过了一个小反调。这似乎解决了这个问题。谢谢! – arthos455