Skip to content

[Bug] 达梦数据库做表左关联时提示有歧义的列名[RN] #690

Open
@jettisonJava

Description

@jettisonJava

APIJSON Version/APIJSON 版本号

6.3.0

Database Type & Version/数据库类型及版本号

达梦8

Environment/环境信息

- JDK/基础库:11.0.16
- OS/系统:windows 10

APIAuto Screenshots/APIAuto 请求与结果完整截屏

代码定位截图(https://img-blog.csdnimg.cn/direct/5f0dfce1c33946148c98beedc89ca038.png)
数据请求截图(https://img-blog.csdnimg.cn/direct/917e8e5e1f2a4e39815a5c384a6109b3.png)

Current Behavior/问题描述

通过翻查源码,发现在AbstractSQLConfig类中,3203行的getOraclePageSql方法中,发现每一个进来的表sql都会默认拼接ROWNUM AS RN 的行数字段,当存在多表关联时,多个表都存在相同的RN列名,导致报错。印象中翻过一个issue有说过APIJSON会将每个相连的表建立alias(不知道是否只有mysql有,而oracle等其他库没有),但实际上达梦(oralce)并没有。包括联表内的字段都没有别名。请求参数中也无法通过建立别名影响RN列的生成。
------------------------
后端生成的sql:
SELECT * FROM (SELECT "Table20240311".*, ROWNUM RN FROM (SELECT "Table20240311".*, "Dd".* FROM "GR_BAS_DYMFORM"."Table20240311" AS "Table20240311"  
   LEFT JOIN ( SELECT * FROM (SELECT "Dd".*, ROWNUM RN FROM (SELECT "id" AS "Dd.id","pid" FROM "GR_BAS_DYMFORM"."Dd") "Dd"  WHERE ROWNUM <= 0) WHERE RN > 0 ) AS "Dd" ON "Dd"."pid" = "Table20240311"."id"  
) "Table20240311"  WHERE ROWNUM <= 50) WHERE RN > 0

--------------
请求参数:
{
    "[]": {
        "join": "</Dd/pid@",
        "Table20240311": {
            "@datasource": "dm",
        },
        "Dd": {
            "pid@": "/Table20240311/id",
            "@datasource": "dm",
            "@column": "id:Dd.id,pid;"
        }, "query": 2,
  "count": 50,
  "page": 0,
    },"info@":"/[]/info","total@":"/[]/total",
}

返回报错结果:
"msg": "第3 行附近出现错误:\n有歧义的列名[RN]",

Expected Behavior/期望结果

能否实现每个联表、字段都自动生成别名,让表字段唯一,互不影响。或者提供对默认的ROWNUM(RN)行数字段别名的修改。

Any additional comments?/其它补充说明?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions