问题:
使用 Apache Derby 连接三个表需要使用什么语法?
我尝试过的:
我正在将 Java 应用程序从 SQLite 转换为 Apache Derby。 在 SQLite 中,以下 SQL 语法可以正常工作。
sql.append("SELECT MatterDataset.id, ");
//Removed rest of selection items for readability and to focus the inquiry
sql.append(" FROM MatterDataset, DocumentClassification, PrivilegeLog " ) ; //<--PROBLEM LINE
sql.append(" ON MatterDataset.matterid = DocumentClassification.matterid " ) ;
sql.append(" AND MatterDataset.matterid = PrivilegeLog.matterid " ) ;
sql.append(" AND MatterDataset.id = DocumentClassification.documentid " ) ;
sql.append(" AND MatterDataset.id = PrivilegeLog.documentparentid " ) ;
sql.append(" WHERE " ) ;
sql.append(" Matterdataset.matterid = ? " ) ; //Prepared statement
sql.append(" AND Matterdataset.isdeleted = 0 " ) ;
导致转换为 Apache Derby 的问题的行是:
sql.append(" FROM MatterDataset, DocumentClassification, PrivilegeLog " ) ;
我已经尝试了几种变体,并且所有变体都引发了 Java Derby 的语法错误(通过 ij 工具)。
1) ',' 处的语法错误,但此语法仅适用于两个表
sql.append(" FROM MatterDataset JOIN DocumentClassification, PrivilegeLog " ) ;
2) 直接如上,在“,”处出现语法错误
sql.append(" FROM MatterDataset, DocumentClassification, PrivilegeLog " ) ; //
3) "AND"处的语法错误
sql.append(" FROM MatterDataset JOIN DocumentClassification AND PrivilegeLog " ) ; //
我不确定还可以尝试什么(在对一般的 SQL 执行类似问题的网络搜索之后)。有没有办法在 Apache Derby 中简单地做到这一点?
环境设置:
Java 7
Apache Derby 10.9.1。
最佳答案
您可以简单地使用 ,
连接表格
sql.append("SELECT MatterDataset.id ");
//Removed rest of selection items for readability and to focus the inquiry
sql.append(" FROM MatterDataset, DocumentClassification, PrivilegeLog " ) ; //<--NOT A PROBLEM LINE
sql.append(" WHERE " ) ;
sql.append(" MatterDataset.id = DocumentClassification.matterid " ) ;
sql.append(" AND MatterDataset.id = PrivilegeLog.matterid " ) ;
sql.append(" AND DocumentClassification.id = PrivilegeLog.documentparentid " ) ;
sql.append(" AND Matterdataset.id = ? " ) ; //Prepared statement
sql.append(" AND Matterdataset.isdeleted = 0 " ) ;
Derby 数据库也可以是 optimized for performance .
关于java - 如何连接 Apache Derby 数据库中的三个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15578912/