【问题标题】:'IN' and 'INNER JOIN' keyword not working with database“IN”和“INNER JOIN”关键字不适用于数据库
【发布时间】:2017-03-08 22:29:01
【问题描述】:

我正在处理我的高级项目,我们正在使用嵌入式 Apache Derby 数据库。我正在尝试从下面的三个表中查询数据,但遇到了麻烦。

 _________________ 
|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: Syntax error: Encountered "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 的情况下从多个表中选择数据也可以正常工作。

更新2: 我相信我犯了一个愚蠢的错误,并且没有在关键字和标识符之间留下空格。感谢您的帮助!

【问题讨论】:

  • 你为什么要使用IN来加入?为什么不直接使用连接?
  • 停止这个。阅读有关联接的信息。
  • 我只有一个级别的 SQL,而且已经一年多了。我正在重新学习,确实需要重新学习。
  • 而且,除了卖淫之外,工作和客户是一回事,这很荒谬
  • @strawberry 的工作和客户是不同的……你是什么意思?

标签: java mysql sql derby


【解决方案1】:

我没有发现您的查询有任何问题,您可以使用 JOIN 代替 IN(在许多情况下更快)

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

【讨论】:

  • 我在“Jobs as j”中得到一个关于“as”的错误我替换了别名并得到一个关于“inner”的错误..
【解决方案2】:

您发布的 SQL 是正确的。错误一定在其他地方。

确保这确实是您正在运行的 SQL(检查错误消息/异常)。如果您在代码中构建 SQL,请确保您确实在执行您认为自己正在执行的操作。

【讨论】:

  • 我非常确定。它是文件中唯一的 SQL,并且为另一个查询将其注释掉可以正常工作。我想知道它是否与 Apache derby 有关。具体来说,错误是指使用'IN'
  • @JGray:好的,那么我们真的需要minimal reproducible example。请缩短您的代码以创建一个并将其添加到您的问题中。
  • @JGray:你看我的评论了吗?我们需要一个minimal reproducible example。你明白那是什么吗?请阅读链接。很遗憾,您的修改没有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 2017-09-14
  • 2023-01-31
  • 2013-03-31
  • 2021-09-24
  • 2021-11-17
相关资源
最近更新 更多