【问题标题】:JDBC mySQL DML ErrorJDBC mySQL DML 错误
【发布时间】:2013-06-24 00:54:35
【问题描述】:

我正在尝试使用 JOIN TABLE QUERY 显示为客户完成的工作的所有相关信息。

这是我的代码...

SELECT Bill.BillID, Duty.TaskTime 
FROM Invoice 
LEFT OUTER JOIN Duty.JobID = Bill.JobID
WHERE Job.CustomerID = Customer.CustomerID

我不断收到此错误... '#1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“.JobID WHERE Job.CustomerID = Customers.CustomerID”附近使用正确的语法

【问题讨论】:

  • 我认为您需要花一些时间阅读如何编写 SQL 连接。您的查询完全没有意义。
  • 您似乎没有声明任何别名。

标签: mysql dml


【解决方案1】:

问题是您试图访问在WHERESELECT 子句中都没有告诉查询的表。当您在 SELECT 子句中说 Bill.BillID 时,您是说您想要来自名为 Bill 的表中的字段 BillID

您的语法违反的规则是您不能在SELECTWHERE 子句中使用表名,除非您在FROM 子句(或JOIN)中提及它。

那么现在,让我们看看您的查询。

SELECT Bill.BillID, Duty.TaskTime 
FROM Invoice 
LEFT OUTER JOIN Duty.JobID = Bill.JobID
WHERE Job.CustomerID = Customer.CustomerID

这意味着您要从名为 BillDuty 的表中选择字段,并根据 JobCustomer 表中的字段过滤结果。但是,您只在 FROM 子句 (Invoice) 中按名称提及了一个表。您几乎加入了 Duty 表,但您将其加入到表中您尚未提及的位置 (Bill)。我将猜测您打算使用Bill 作为Invoice别名。这意味着你真正想要的更像是:

// Still incorrect
SELECT Bill.BillID, Duty.TaskTime 
FROM Invoice AS Bill
LEFT OUTER JOIN Duty ON Duty.JobID = Bill.JobID
WHERE Job.CustomerID = Customer.CustomerID

但我们仍然没有提到WHERE 子句中引用的JobCustomer 表。为了使用它们,您还需要JOIN 这些表。我们需要更多地了解您的架构才能弄清楚如何做到这一点,但我可以告诉您,您至少需要两个JOIN 子句。假设您在Invoice 表上有一个CustomerID 字段,我们可能希望像这样加入。

// speculative
SELECT Bill.BillID, Duty.TaskTime
FROM Invoice AS Bill
LEFT OUTER JOIN Duty ON Duty.JobID = Bill.JobID
JOIN Customer ON Customer.CustomerID = Bill.CustomerID
JOIN Job ON // Well, something...We don't know.

强烈建议你花一些时间阅读和学习优秀的Wikipedia entry on SQL JOINs。祝你好运~

【讨论】:

    【解决方案2】:

    你的错误在于你如何指向你的桌子,也许:

    FROM Invoice as Bill LEFT OUTER JOIN NameTable2 as Duty ON Dury.JobID=Bill.JobID

    【讨论】:

    • 现在我收到“WHERE Job.CustomerID = Customer.CustomerID”的错误。我不知道该怎么办
    • 好的,就像你现在一样,我曾经是这样的:) 看:当你在 sql 中引用一个列时,我们使用以下结构:DataBase.Owner.TableOrAlias.column,所以你写了 WHERE Job .CustomerID,错误是您没有在 FROM 子句中引用作业表。我们上面来自 LanMcLaird 的最后一个代码很接近您的需要,抱歉,我们无法猜测您的数据库如何为您提供帮助
    猜你喜欢
    • 2014-04-26
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 2016-12-28
    • 1970-01-01
    相关资源
    最近更新 更多