Skip to content

oracle联表查询问题 #393

Open
Open
@sangenmutou

Description

@sangenmutou

环境信息

  • 系统: 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,目前没有过于复杂的语句,只需实现最简单的联表查询即可,目前源码也在看,还不熟悉
错误信息

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