java H2:嵌套查询计数查询中的重复列名
我想知道是否可以在嵌套查询中保留表名以避免Duplicate column name
错误
作为一个简单的例子,我有以下表格:
- 客户:身份证、姓名、城市号
- 城市:身份证、姓名、邮编
以下查询失败,错误为Duplicate column name "NAME"
:
SELECT COUNT(*) FROM (
SELECT CUSTOMERS.NAME, CITY.NAME
FROM CUSTOMERS JOIN CITIES ON CUSTOMERS.CITY_ID = CITIES.ID
)
显然,H2会在嵌套查询中剥离表名,从而产生两个名为NAME
的列
(见COUNT with subquery fail on H2 database with "Duplicate column name")
一种解决方案是在嵌套查询中使用列别名,但由于其他项目需求,我希望避免使用它(即,我希望使用Jooq生成的列标识符来构建查询)
您知道一种强制H2在嵌套查询中保留表名的方法吗
# 1 楼答案
问题
这是一个已知的jOOQ问题,专门针对^{} :https://github.com/jOOQ/jOOQ/issues/7867的用法
它与H2无关,但适用于所有数据库,因为所有数据库都允许在顶级选择中使用重复的列名,但在派生表中不允许
jOOQ应按如下方式消除您的列名歧义:
但这很棘手,因为这些列可能是从
ORDER BY
子句引用的(这可能是因为LIMIT
/FETCH
子句而需要),所以这个问题还没有解决解决方法
你必须自己解决这个问题。你有3个选择:
COUNT(*) OVER ()
表达式来计算每行的计数值李>