我正在尝试使用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'附近使用正确的语法
答案 0 :(得分:1)
问题是您尝试在WHERE
和SELECT
子句中访问尚未告知查询的表。当您在Bill.BillID
子句中说SELECT
时,您说要从名为BillID
的表格中找到字段Bill
。
您的语法破坏的规则是您不能在SELECT
或WHERE
子句中使用表名,除非您在FROM
子句中提到它(或一个JOIN
)。
现在,让我们来看看你的问题。
SELECT Bill.BillID, Duty.TaskTime
FROM Invoice
LEFT OUTER JOIN Duty.JobID = Bill.JobID
WHERE Job.CustomerID = Customer.CustomerID
这意味着您要从名为Bill
和Duty
的表中选择字段,并根据Job
和Customer
表中的字段过滤结果。但是,您只在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
子句中引用的Customer
或WHERE
表。为了使用它们,您还需要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