Tencent/APIJSON

oracle联表查询问题

Open

#393 aperta il 9 mag 2022

Vedi su GitHub
 (4 commenti) (0 reazioni) (0 assegnatari)Java (2229 fork)batch import
Bug 漏洞OracleQuestion 使用问题help wanted

Metriche repository

Star
 (17.967 star)
Metriche merge PR
 (Merge medio 4h 34m) (1 PR mergiata in 30 g)

Descrizione

环境信息

  • 系统: Windows 10
  • JDK: 1.8.0_17
  • 数据库: oracle 12c
  • APIJSON: 5.0.0

问题描述

1、join目前存在问题,oracle表名不支持as,重写getTablePath()后,inner join可以了,left join依然有问题 2、inner join的问题: 两表联查返回是没问题的,三表联查只能返回主表数据,三个以上的表没有测试 查询的apijson:

{
  "[]": {
    "join": "&/T_user,&/T_role",
    "T_user_role": {
      "@column": "id,user_id,role_id"
    },
    "T_user": {
      "@column": "id:tid",
      "user_id@": "/T_user_role/user_id",
      "id": "1507289794365997058"
    },
    "T_role": {
      "@column": "role_name",
      "id@": "/T_user_role/role_id"
    }
  }
}

返回的结果:

{
  "[]": [
    {
      "T_user_role": {
        "ID": "1522094327143153666",
        "USER_ID": "admin",
        "ROLE_ID": "1507937710264930305"
      }
    },
    {
      "T_user_role": {
        "ID": "1522094327164125186",
        "USER_ID": "admin",
        "ROLE_ID": "1508037483122679810"
      }
    }
  ],
  "ok": true,
  "code": 200,
  "msg": "success"
}

打印的sql是没问题的 SELECT T_user_role.id,T_user_role.user_id,T_user_role.role_id, T_user.id AS tid, T_role.role_name FROM T_user_role T_user_role
INNER JOIN T_user T_user ON T_user.user_id = T_user_role.user_id
INNER JOIN T_role T_role ON T_role.id = T_user_role.role_id
WHERE ( ( ( (T_user.id = '1507289794365997058') ) ) )

3、left join的问题 查询的apijson:

{
  "[]": {
    "join": "</T_user",
    "T_user_role": {
      "@column": "id,user_id,role_id"
    },
    "T_user": {
      "@column": "id:tid",
      "user_id@": "/T_user_role/user_id",
      "id": "1507289794365997058"
    }
  }
}

打印的语句: SELECT T_user_role.id, T_user_role.user_id, T_user_role.role_id, T_user.* FROM T_user_role T_user_role LEFT JOIN (SELECT id AS tid FROM T_user WHERE ((id = '1507289794365997058')) OFFSET 0 ROWS FETCH NEXT 0 ROWS ONLY) AS T_user ON T_user.user_id = T_user_role.user_id left join中依然有 as关键字,不知道如何去掉

想实现的效果为 SELECT T_user_role.id, T_user_role.user_id, T_user_role.role_id, T_user.id tid FROM T_user_role T_user_role LEFT JOIN T_user T_user ON T_user.user_id = T_user_role.user_id and T_user.id = '1507289794365997058'

还请百忙之中,帮忙看下,单表的都测试过了,基本是没有问题的,联表查询用的最多就是inner join和left join,目前没有过于复杂的语句,只需实现最简单的联表查询即可,目前源码也在看,还不熟悉 错误信息

Guida contributor