故国春城2023 2020-04-30 17:19 采纳率: 0%
浏览 458

如何将多表多字段外部条件拼接到sql where或者on的正确位置?

设计的mybatis数据权限拦截器,根据不同数据源#不同表的字段有相关的预设的数据权限值或者取值范围,但sql中多表有别称或者嵌套sql语句内,没有where条件的情况可能需要去添加where

举个例子:

select * from table_a t_a where id in (select id from table_b)

假如table_b当前用户有一定的权限#比如 i d>8 and id<12,t_a.name='张三' or t_a.name='王五'

我希望能够拼接成如下格式:

select * from table_a t_a where id in (select id from table_b where i d>8 and id<12 ) where t_a.name='张三' or t_a.name='王五'

1、如果表存在别名,首先正则表达式"(t_a\.\w+\=)"匹配第一个别名赋值语句位置,因为赋值条件成立,所以可以在之前添加拼接条件,可以解决join或者带where的相关拼接问题.

2、如果不匹配的话,可能如下部分可能性:

[1]、可能没有相关where,但sql语法支持,如何匹配到添加where的位置?
[2]、内部嵌套,如何识别并在合适的位置添加where,另外添加where 后面是否有group by|limit|having|order by

例子如下:
select * from table_a t_a where id in (select id from table_b) limit 0,10
欢迎大家来一起讨论#目前在做的时候遇到了如何找到需要添加where的位置的问题#希望大家能够奉献下宝贵的意见###谢谢@!!!

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2020-05-04 15:35
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示