旋转的钢笔 2018-07-03 09:29 采纳率: 54.5%
浏览 530
已采纳

oracle查询计划信息,如何分隔关联查询?

现要查询计划表信息,和组织权限相关联,目前sql
T_TRAIN_PLAN 表结构
图片说明

图片说明
t_employee_organization_ref表结构
图片说明
图片说明

 select *
  from (select distinct t.plan_name,
                        t.plan_code,
                        t.begin_date,
                        t.end_date,
                        t.id,
                        t.status,
                        t.verify,
                        t.isDel,
                        ROWNUM RN
          from (select t.plan_name,
                       t.plan_code,
                       t.begin_date,
                       t.end_date,
                       t.id,
                       t.status,
                       t.verify,
                       row_number() over(order by create_time desc) as seqnum,
                       (select count(1)
                          from t_train_session ts
                         where ts.plan_id = t.id
                           and ts.train_begin_time < sysdate) isDel
                  FROM (SELECT *
                          FROM (SELECT t.store_id,
                                       t.plan_name,
                                       t.plan_code,
                                       t.begin_date,
                                       t.end_date,
                                       t.id,
                                       t.status,
                                       t.verify,
                                       create_time,
                                       t.remark  mark
                                  FROM T_TRAIN_PLAN t
                                 where t.status in ('0', '2') and t.remark is not null ) t,
                               t_employee_organization_ref a 
                         where t.store_id = a.unit_id  
                           and a.employee_code = 'admin') t) t
         where seqnum <=10
         order by t.begin_date desc)
 where rn > 0;


 抽取主体也就是

  SELECT *
                          FROM (SELECT t.store_id,
                                       t.plan_name,
                                       t.plan_code,
                                       t.begin_date,
                                       t.end_date,
                                       t.id,
                                       t.status,
                                       t.verify,
                                       create_time,
                                       t.remark  mark
                                  FROM T_TRAIN_PLAN t
                                 where t.status in ('0', '2') and t.remark is not null ) t,
                               t_employee_organization_ref a 
                         where t.store_id = a.unit_id  
                           and a.employee_code = 'admin'    

目前的业务是,当创建计划时,Store_id可以选择多个, 保存的时候,如果store_id是多个,则保存在了remark字段中,如果只是一个保存在store_id字段中, 那么问题
来了,如果store_id是多个,已逗号分隔的形式保存在了remark字段中,我怎么和t_employee_organization_ref 组织权限表关联啊? 并且查找出计划信息。。。

  • 写回答

3条回答 默认 最新

  • cfm999 2018-07-03 14:36
    关注

    SELECT t.*
    FROM t_train_plan t
    INNER JOIN t_employee_organization_ref a
    ON (','|| t.remark ||',' LIKE '%,'|| a.unit_id ||',%'
    OR t.store_id = a.unit_id)
    AND t.status IN ('0', '2')
    AND a.employee_code = 'admin';

    --REMARK多个store_id,一条t_train_plan记录在结果中可能有多条
    --语句未实际测试
    --另外,贴中语句嵌套层次太多,建议尽量避免子查询!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)