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