【问题标题】:Is it possible in Java to retrieve tables of unrelated data in a single SQL query and resultset?在 Java 中是否可以在单个 SQL 查询和结果集中检索不相关数据的表?
【发布时间】:2011-08-23 16:52:42
【问题描述】:

我们有多个包含“静态”键/值对的表,这些表当前是使用多个 SQL (MSSQL) 查询提取的。是否可以在一个 SQL 查询中提取所有这些数据,以便我们可以在单个结果集中引用每个列键和列值?比如:

TABLE_ONE
id, my_key_name, my_value_name

TABLE_TWO
id, my_other_key_name, my_other_value_name

请记住,每个表的键和值的列名都不同。基本上,我们试图将多个调用合并为一个。在这种情况下,我们必须拥有多个 Java ResultSet,而我们只需要在代码中进行组合吗?

【问题讨论】:

  • 如果可以用sql做,那么用java也可以用sql做
  • 我认为是联合运营商w3schools.com/sql/sql_union.asp。不是专家,但有趣的问题,所以我看了一点。和 AS 运算符使您的列具有相同的名称。

标签: java sql resultset multiple-resultsets


【解决方案1】:

怎么样

SELECT id, my_key_name, my_value_name
FROM   TABLE_ONE
UNION
SELECT id, my_other_key_name, my_other_value_name
FROM   TABLE_TWO

?

见:UNION

【讨论】:

  • 啊,我误以为列名需要匹配。有趣的是,这些列只是从第一个 SELECT 语句中获取名称,而其他列只需要我相同数量的列和匹配类型。嗯!
  • @NullUserException 看看下面 Adam 的响应,这是否与您期望在结果集中检索并集的方式一致?我也不希望覆盖重复的值,我认为 UNION 会这样做......我需要使用 UNION ALL 吗?
  • @Brian UNION 将消除重复,如果你想要一切,你需要UNION ALL
  • @Brian 这将返回一个包含两个 SELECT 语句的结果的结果集(假设您使用 UNION ALL)。这里的问题是您无法真正知道哪些结果来自哪个表。这可能是你想要的,也可能不是。这取决于您在获取数据后如何使用数据。
  • @Adam 我没想到...根据表名调用?
【解决方案2】:

我不知道你是否可以在一个语句中做到这一点(通过用分号分隔查询),但你当然可以创建一个返回多个结果集的存储过程。

调用 getResultSet 后,您可以使用 getMoreResults 方法(来自 java.sql.Statement)移动到下一个 ResultSet。它会关闭当前的 ResultSet,因此在调用 getMoreResults 并从 Statement 中获取下一个 ResultSet 之前,您需要从第一个 ResultSet 中获取所需的任何数据。

【讨论】:

  • 这种行为是否与大多数驱动程序一致?
  • 我不确定各种驱动程序是如何处理它的,我已经有一段时间没有直接使用 JDBC 了。但是,任何未实现 java.sql.Statement 接口契约中行为的驱动程序都将是一个损坏的驱动程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 2012-12-10
  • 2019-10-06
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多