2013-06-26 55 views
1

我正在嘗試使用JOIN TABLE QUERY顯示爲客戶完成的任務的所有相關信息。JDBC mySQL DML錯誤

這裏是我的代碼...

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

我不斷收到這個錯誤... 「#1064 - 你有一個錯誤的SQL語法;檢查對應於你的MySQL服務器版本使用附近的「.JobID WHERE Job.CustomerID = Customers.CustomerID」在行3'

正確的語法手冊
+3

我想你需要花些時間閱讀如何編寫SQL聯接。你的查詢根本沒有意義。 – kosa

+0

似乎你沒有聲明任何別名。 –

回答

0

你的錯誤是你如何將您的表格,也許:

開出發票比爾LEFT OUTER JOIN NameTable2作爲值班Dury.JobID = Bill.JobID

+0

現在我收到'WHERE Job.CustomerID = Customer.CustomerID'的錯誤。我不知道該怎麼做 – user2525364

+0

好吧,因爲你現在有一次是我:)看:當你在sql中引用列時,我們使用以下結構:DataBase.Owner.TableOrAlias.column,所以你寫了WHERE Job.CustomerID,錯誤是你沒有在FROM子句中引用Job表。 LanMcLaird上方的最後一個代碼與您需要的密切相關,對不起,我們無法猜測您的數據庫如何幫助您 –

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