【问题标题】:Join three table in JDBC在 JDBC 中连接三个表
【发布时间】:2016-02-15 05:41:14
【问题描述】:

我有这段代码并且不断收到语法错误。

query = "SELECT * "+
"FROM Product " +
"INNER JOIN Orders ON (Product.ItemID=Orders.ItemID) " +
"LEFT OUTER JOIN SupplierProduct ON (Orders.ItemID=SupplierProduct.ItemID) "+
"WHERE Product.Receiver = 'Fred' " +
"ORDER BY Product.ItemName";    

DefaultTableModel data = table.getQuery(query);

我也试过用INNER JOIN 代替LEFT OUTER JOIN。我一直在尝试的错误是。

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing     operator) in query expression '(Product.ItemID=Orders.ItemID) LEFT OUTER JOIN  SupplierProduct ON (Orders.ItemID=SupplierProduct.ItemID'.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcStatement.execute(Unknown Source)

我在这里缺少什么或如何加入三个表。

【问题讨论】:

标签: sql ms-access syntax-error


【解决方案1】:

尝试像这样使用括号:

query = "SELECT * "+
        "FROM (Product " +
        "INNER JOIN Orders ON (Product.ItemID=Orders.ItemID)) " +
        "LEFT OUTER JOIN SupplierProduct ON (Orders.ItemID=SupplierProduct.ItemID) "+
        "WHERE Product.Reciever = 'Fred' " +
        "ORDER BY Product.ItemName";  

【讨论】:

  • 谢谢你这对我有用。我不知道需要括号。
【解决方案2】:

看起来 JDBC 可能难以解析连接的顺序。这可能是您正在与之交互的数据库引擎特有的问题,但无论如何,如果您使用括号指定连接操作的顺序,任何引擎都应该能够正确解析查询:

query = "SELECT * "+
"FROM (Product " +
"INNER JOIN Orders ON (Product.ItemID=Orders.ItemID)) " +
"LEFT OUTER JOIN SupplierProduct ON (Orders.ItemID=SupplierProduct.ItemID) "+
"WHERE Product.Reciever = 'Fred' " +
"ORDER BY Product.ItemName";    

DefaultTableModel data = table.getQuery(query);

更多细节:

基本上,这个想法是分离每个连接,以便它可以或多或少地被解释为一个独立的表。这有助于更完全地区分

SELECT * 
FROM (Table1 JOIN Table2 ON Table1.a = Table2.a) 
     JOIN Table3 on Table3.b = Table2.b

来自

SELECT * 
FROM Table1 
     JOIN (Table2 JOIN Table3 on Table3.b = Table2.b) ON Table1.a = Table2.a

另外,请注意,您可能需要为第一次连接的结果设置别名,如下所示:

SELECT * 
FROM (Table1 JOIN Table2 ON Table1.a = Table2.a) as join1 
     JOIN Table3 on Table3.b = join1.b

【讨论】:

  • 感谢您提供详细信息。帮助我理解它。
猜你喜欢
  • 2016-12-07
  • 2013-09-28
  • 2012-02-06
  • 1970-01-01
  • 2016-12-20
  • 2018-11-06
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多