JDBC mySQL DML错误

时间:2013-06-26 18:20:55

标签: mysql dml

我正在尝试使用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'附近使用正确的语法

2 个答案:

答案 0 :(得分:1)

问题是您尝试在WHERESELECT子句中访问尚未告知查询的表。当您在Bill.BillID子句中说SELECT时,您说要从名为BillID的表格中找到字段Bill

您的语法破坏的规则是您不能在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

但是我们仍然没有提到Job子句中引用的CustomerWHERE表。为了使用它们,您还需要JOIN这些表。我们需要了解有关您的架构的更多信息,以了解如何执行此操作,但我可以告诉您,您需要至少两个JOIN子句。假设CustomerID表上有Invoice字段,我们可能希望像这样加入。

// 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。祝你好运〜

答案 1 :(得分:0)

你的错误就是你如何指出你的表,也许:

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