2017-03-08 77 views
0

我的工作我的高級項目,我們使用的是嵌入式Apache Derby數據庫工作。我試圖從下面的三個表中查詢數據,但遇到了麻煩。「IN」和「INNER JOIN」關鍵字不能與數據庫

_________________ 
|Customers  | 
|-----------------| 
| *Customer_ID | 
| LastName  |** 
| FirstName  |** 
| PhoneNumber  | 
| Street   | 
| City   |  
| State   |       
| ZipCode   | 
| Note   | 
----------------- 
_________________ 
|Jobs    | 
|-----------------| 
| *Job_ID   | 
| Customer_ID  | 
| Address   | 
| Date   | 
----------------- 
_________________ 
|Invoices   | 
|-----------------| 
| *Job_ID   |** 
| Subtotal  | 
| TaxPercent  | 
| Total   |** 
| DateSent  |** 
| DateDue   |** 
| DatePaid  |** 
----------------- 

在上表中,(**)是指需要檢索的數據。我相信我下面附加的查詢應該可以工作,但執行後,我得到一個錯誤消息:java.sql.SQLSyntaxErrorException:語法錯誤:遇到「IN」;

如果有人可以幫幫忙,謝謝!

SELECT Customer_ID, 
    , Job_ID 
    , LastName 
    , FirstName 
    , Total 
    , DateSent 
    , DateDue 
    , DatePaid 
FROM Invoices 
    , Customers 
WHERE Customer_ID in (
         SELECT Customer_ID 
         FROM Jobs 
         WHERE Jobs.Job_ID in (
               SELECT Job_ID 
               FROM Invoices 
              ) 
        ) 

更新:我切換到使用MySQL的應用程序,看看是否可以解決問題;它沒。我能夠得到以下查詢在MySQL中運行,但是當我從Java執行查詢時仍然收到錯誤。

SELECT Customers.Customer_ID 
      ,Jobs.Job_ID 
      ,LastName 
      ,FirstName 
      ,Total 
      ,DateSent 
      ,DateDue 
      ,DatePaid 
FROM Jobs INNER JOIN Customers on Customers.Customer_ID = Jobs.Customer_ID 
      INNER JOIN Invoices on Jobs.Job_ID = Invoices.Job_ID; 

查詢在MySQL中運行而不是在Java中運行的原因是什麼?也可以在不使用INNER JOIN或IN的情況下從多個表中選擇數據。

UPDATE2: 我認爲我犯了一個愚蠢的錯誤,沒有在關鍵字和標識符之間留出空格。謝謝您的幫助!

+1

爲什麼你使用'IN'做加盟JOIN使用代替(它更快,在許多情況下)?爲什麼不直接使用連接? –

+1

停止這個。閱讀關於連接。 – Strawberry

+0

我只有一類SQL,已經過去了一年多。我正在重新學習,而且確實需要刷新連接。 – JGray

回答

1

我看不出有什麼問題與您的查詢,您可以

SELECT j.Customer_ID,j.Job_ID,LastName,FirstName,Total, DateSent, DateDue,DatePaid 
FROM Jobs as j inner join Customers as c on c.Curstomer_ID = j.CustomerID 
       inner join Invoices as i on j.Job_ID = i.Job_ID 
+0

我得到一個錯誤約「爲」「喬布斯J」我取代了鋸齒和得到一個錯誤的「內部」 .. – JGray

+0

現在 –

+0

必須努力讓我知道,如果它的正常工作 –

1

您發佈的SQL是正確的。該錯誤必須在其他地方。

確保這真的是你正在運行的SQL(查看錯誤信息/除外)。如果您在代碼中構建SQL,請確保您確實正在執行您認爲正在執行的內容。

+0

我絕對相信。它是該文件中唯一的SQL,併爲另一個查詢註釋它工作正常。我想知道它是否與Apache德比有關。具體來說,錯誤指的是使用'IN' – JGray

+1

@JGray:好的,那麼我們確實需要一個[MCVE]。請縮短您的代碼以創建一個並將其添加到您的問題中。 – sleske

+0

@JGray:你看過我的評論嗎?我們需要一個[MCVE]。你明白那是什麼嗎?請閱讀鏈接。不幸的是,你的編輯沒有幫助。 – sleske