java - 是否可以只用一个查询来检索分成三个表的对象?

标签 java sql postgresql cursor

编辑:答案有效,但会大大减慢查询速度。还有其他解决办法吗?

<小时/>

我的程序中有以下对象。

Page有各种TextBlock有各种Token .

这三者存储在数据库中的三个表中,对象名称相同。

我想知道是否可以仅通过一次查询来恢复填充程序中对象所需的所有数据。

我只想要一个查询,因为我正在使用 CURSOR迭代存储在数据库中的所有对象。

数据库方案是这样的:

Page(id, someAttributes)<br/> TextBlock(id,pageId, someAttributes)<br/> Token(textblockId, someAttributes)

最佳答案

假设每个页面至少有一个文本 block ,每次尝试至少有一个 token

SELECT * FROM
Page AS P 
INNER JOIN TextBlock T ON T.pageId = P.id 
INNER JOIN Token TK ON TK.textblockId = T.id;

或者(旧语法):

SELECT * FROM
Page AS P, TextBlock T, Token TK WHERE 
T.pageId = P.id AND
TK.textblockId = T.id;

如果上述条件可能并不总是成立,那么您需要使用 OUTER JOIN 而不是 INNER JOIN

关于java - 是否可以只用一个查询来检索分成三个表的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7200134/

相关文章:

java - Oracle JDK 不是开源项目吗?

java - 在java中获取准备语句的空异常

postgresql - 如何将记录传递给 PL/pgSQL 函数?

sql - 如何从相邻表中动态数量的相关行获取聚合数据

postgresql - 特定条件下查询执行缓慢

sql - 使用 Postgresql 合并连续的行

java - JSF 在 View 根目录中找不到具有表单 ID 的组件

java - 字符串和最终

java作业与单词替换

mysql - 如何修改 MySQL 命令行中的多行语句?