2017-03-08 27 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