如何在没有连接的情况下查询多个相关表,并使用 JDBC 获得一致的数据?

Posted

技术标签:

【中文标题】如何在没有连接的情况下查询多个相关表,并使用 JDBC 获得一致的数据?【英文标题】:How can I query multiple related tables, without a join, and get consistent data using JDBC? 【发布时间】:2017-07-26 18:49:45 【问题描述】:

我正在创建一个进程,该进程通过 JDBC 连接到给定的 SQL Server 数据库,扫描每个表,并读取自上次运行此进程以来已插入或更新的任何新数据。出于性能考虑,数据库的所有者将不允许此过程对任何表进行联接。

有问题的场景

表 A 是表 B 的父表 此进程从表 A 中读取数据 在读取表 B 的进程之前,插入了新的父记录 到表 A 中,新的子记录被插入到表 B 中 读取表 B 时,将存在不存在的子记录 在结果集中有对应的父记录 以前读过的表 A

【问题讨论】:

你能用ASP.NET等可以处理数据的服务吗? 我正在使用 JAVA 8 并通过 JDBC 连接 ROFL。由于性能问题,他们不会允许连接,但他们可以读取每个表的每一行吗?这完全没有任何意义。他们阻止以标准方式访问数据,因为它可能会影响性能,但允许非标准方式绝对会对性能产生负面影响。有人需要和这个人谈谈,问他们这个愚蠢的想法是从哪里想到的。 进程不会读取每一行。最后修改的时间戳列将用于确定自上次运行以来发生了什么变化。 即便如此,不使用 join 的奇怪强制执行是我听说过的最奇怪的事情之一。 【参考方案1】:

如果您不能执行 JOIN,那么您可能只需要跟踪每个父表的每个检索到的主键,然后使用这些主键来查询子行。它将使查询复杂化,并给数据库增加更多压力,因为您执行更多查询而不是在单个 JOINed 查询中执行它,但它应该给出相同的结果。

【讨论】:

以上是关于如何在没有连接的情况下查询多个相关表,并使用 JDBC 获得一致的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有任何重复行的情况下连接两个表中的表?

如何在没有昂贵查询的情况下更快地自连接表(Oracle SQL)

如何在没有实体的学说查询中合并连接表

选择多个列而不进行多个查询 php mysql

如何在不使用 Join 的情况下处理引用其他表的相关子查询的问题

如何在没有重复数据的情况下对两个具有连接的表进行求和?