Java 如何从子查询中获取结果集的别名?

Java 如何从子查询中获取结果集的别名?,java,sql,jdbc,alias,resultset,Java,Sql,Jdbc,Alias,Resultset,我在获取结果集的列名别名时遇到问题。 我做了一个子查询,在那里我使用别名functionMAX。。。在SQL中,但每次执行语句时,都会得到java.SQL.SQLException,因为列名无效。我使用当前别名调用ResultSet的getString函数 这是我在Eclipse中的SQL语句: String sql = "SELECT a.steelgrade, a.prod_order_id, a.prod_order_item_pos, "

我在获取结果集的列名别名时遇到问题。 我做了一个子查询,在那里我使用别名functionMAX。。。在SQL中,但每次执行语句时,都会得到java.SQL.SQLException,因为列名无效。我使用当前别名调用ResultSet的getString函数

这是我在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中:

这是数据库中的整个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
有人有什么建议吗


Maurice

当使用聚合函数max、min、sum,。。。必须使用group by子句。

是否尝试直接在数据库中手动运行查询?似乎它缺少了一些东西。。。也许分组?顺便说一下,如果您能标记您正在使用的数据库,我们将不胜感激……是的,我之前在数据库中执行了该语句,以检查我的SQL查询是否一切正常。在DB中,不管它如何工作!在本例中,我使用Oracle DB。首先,您缺少一个结束括号,因此无法按原样运行它。第二,您真的可以运行:从生产订单中不分组地选择产品订单id、产品订单项目pos、最大产品订单版本作为最大版本吗?也许我接触Oracle DB的时间太长了……我已经创建了一个GROUP BY,但仍然不起作用:……GROUP BY prod\u order\u id,prod\u order\u item\u pos cAs我在最初的评论中已经写过:首先让查询在DB上运行,然后开始担心让它与代码一起工作!好的,到目前为止我已经编辑了SQL语句:“代码”字符串sql2=SELECT a.steelgrade,a.prod\u order\u id,a.prod\u order\u item\u pos,+a.prod\u order\u version,a.strip\u thickn\u aim,a.strip\u width\u aim,+a.customer,a.order\u weight\u plan,b.grund\u kommlos,b.coil\u weight+从SELECT prod\u order\u item\u id,prod\u pos,+MAX prod\ U order\ U version AS MAX\ U version+来自生产订单+按产品订单进行分组\u id,prod\ U order\ U物料\u pos c这将引发错误,因为子查询中不允许分组依据。为我们提供需求和表结构,以帮助您重新构造查询。我刚刚编辑了我的问题,在那里您可以看到整个sql语句,它在oracle DB上工作
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