如何从子查询中获取 ResultSet 的别名?
Posted
技术标签:
【中文标题】如何从子查询中获取 ResultSet 的别名?【英文标题】:How can I get the alias name for my ResultSet from a Subquery? 【发布时间】:2015-02-20 08:12:29 【问题描述】:我在获取 ResultSet 的列名别名时遇到问题。
我做了一个子查询,我在其中使用别名函数(SQL 中的 MAX(...)),但每次执行语句时,我都会得到 java.sql.SQLException
,因为列名无效。我使用当前别名调用 getString
- 我的 ResultSet 的函数。
这是我在 Eclipse 中的 SQL 语句:
String sql = "SELECT a.steelgrade, a.prod_order_id, a.prod_order_item_pos, "
+"a.prod_order_version, a.strip_thickn_aim, a.strip_width_aim, "
+"a.customer, a.order_weight_plan, b.grund_kommlos, b.coil_weight "
+"FROM (SELECT prod_order_id, prod_order_item_pos, "
+ "MAX (prod_order_version) AS max_version "
+ "FROM production_order "
在结果集中while.next()
-Loop:
prod_order_version = AuftraegeProduction.getString("max_version");
这是整个 SQL 语句(在数据库中它工作正常!):
SELECT a.steelgrade, a.prod_order_id, a.prod_order_item_pos,
a.prod_order_version, a.strip_thickn_aim, a.strip_width_aim,
a.customer, a.order_weight_plan, b.grund_kommlos, b.coil_weight
FROM (SELECT prod_order_id, prod_order_item_pos,
MAX (prod_order_version) AS max_version
FROM production_order
GROUP BY prod_order_id, prod_order_item_pos) c
JOIN
production_order a
ON a.prod_order_id = c.prod_order_id
AND a.prod_order_item_pos = c.prod_order_item_pos
AND a.prod_order_version = c.max_version
JOIN pps_plan_slab b
ON b.prod_order_id = c.prod_order_id
AND b.prod_order_item_pos = c.prod_order_item_pos
AND b.prod_order_version = c.max_version
WHERE a.strip_thickn_aim > 1.78
AND a.strip_thickn_aim < 3.26
AND a.steelgrade = 'M4R51'
AND a.prod_order_id NOT BETWEEN '0999551' AND '0999599'
AND a.strip_width_aim BETWEEN 1126 AND 1166
AND NVL (a.order_weight_plan, 0) > 0
AND a.order_weight_plan >= b.coil_weight
ORDER BY prod_order_id ASC
有人有什么建议吗?
莫里斯
【问题讨论】:
您是否尝试直接在数据库中手动运行查询?似乎它缺少了一些东西......也许group by
?顺便说一句,如果您标记您正在使用的数据库,将不胜感激......
是的,我之前在数据库中执行了语句,以检查我的 SQL 查询是否一切正常。在数据库中,它可以工作!在这种情况下,我使用 Oracle 数据库。
首先,您缺少一个右括号 - 所以它不可能“按原样”运行。二、不分组真的能跑:SELECT prod_order_id, prod_order_item_pos, MAX (prod_order_version) AS max_version FROM production_order
吗?可能我太久没接触Oracle DB了……
我创建了一个“GROUP BY”,但还是不行:“...GROUP BY prod_order_id, prod_order_item_pos) c
正如我在最初的评论中所写的:首先让查询在数据库上运行,然后开始担心让它与您的代码一起工作!
【参考方案1】:
当使用聚合函数 max(),min(),sum(),... 时,必须使用 group by 子句。
【讨论】:
好的,到目前为止,我已经编辑了 SQL 语句:'code' String sql2 = "SELECT a.steelgrade, a.prod_order_id, a.prod_order_item_pos, " +"a.prod_order_version, a. strip_thickn_aim, a.strip_width_aim, " +"a.customer, a.order_weight_plan, b.grund_kommlos, b.coil_weight " +"FROM (SELECT prod_order_id, prod_order_item_pos, " + "MAX (prod_order_version) AS max_version " + "FROM production_order " + "GROUP BY prod_order_id, prod_order_item_pos) c " 这也会引发错误,因为子查询中不允许分组。向我们提供要求和表结构,以帮助您重新构建查询结构。 我刚刚编辑了我的问题,在那里你可以看到适用于 oracle DB 的整个 sql 语句以上是关于如何从子查询中获取 ResultSet 的别名?的主要内容,如果未能解决你的问题,请参考以下文章