例子:
SELECT * 
FROM (
SELECT * 
FROM (
SELECT c. * , r. * 
FROM RIGHT_TEST AS c
LEFT JOIN authorize_table AS r ON r.TABLE_NO =1 
AND c.TABLE_ID = r.TABLE_REC_ID 
and(( $$_PUB_IN_RIGHT_TYPE <=-10 and $$_PUC_DEPART_TYPE = 2 and $$_PUC_DEPART_ID1 = 1 )
OR ( $$_PUB_out_RIGHT_TYPE <=-10 and $$_PUC_DEPART_TYPE = 2 and $$_PUC_DEPART_ID1 != 1 )
)
ORDER BY r.PRI DESC 
) AS z
GROUP BY z.TABLE_ID
ORDER BY z.TABLE_ID ASC 
) AS s
where 
($$_PUB_IN_RIGHT_TYPE >0 and $$_PUC_DEPART_TYPE = 2 and $$_PUC_DEPART_ID1 = 1) or
($$_PUB_OUT_RIGHT_TYPE >0 and $$_PUC_DEPART_TYPE = 2 and $$_PUC_DEPART_ID1 != 1) or
( $$_PUB_IN_RIGHT_TYPE<=-10 and PEOPLE_SET_TYPE = 2 and PEOPLE_SET_ID1 = 1 and REC_RIGHT_TYPE > 0) or
( $$_PUB_IN_RIGHT_TYPE<=-11 and PEOPLE_SET_TYPE is null)如果,使用case 该怎么优化.

解决方案 »

  1.   

    没太看懂你的业务逻辑,能否解释一下,或者举些例子说明一下。这样可以直接看看用CASE WHEN如何实现。
      

  2.   

    例子:
    表A:
    张三 李四 王五
    1  1   1 表编号
    1  2   3 享受表表ID
    1  1   1 记录表ID
    2  2   2 赐予人员类型ID
    1  1   1 人员集ID
    1  0   0 权限方式ID
    3  4   5  优先级表B数据:
    张三 李四 王五 名称
    2   2    2  所用人类型
    19  18   20 岁数
    1   1    1所用ID
    1   0    1内权限方式类型
    0   1    1公开方位类型
    2   2    2公开范围
    1   1    1公开范围01
    比如, 我想查看当前用户张三的记录并且产看他的记录的优先级等。 还要进行判断当前张三是内权限还是外权限 和他的公开ID 是都一致否则会过滤掉为NULL。
    所以,我使用了。大部分的
         内部权限                         公共的级别ID                  公共人员_ID =1
      ($$_PUB_IN_RIGHT_TYPE >0 and $$_PUC_DEPART_TYPE = 2 and $$_PUC_DEPART_ID1 = 1) or 
         外部权限                          
    ($$_PUB_OUT_RIGHT_TYPE >0 and $$_PUC_DEPART_TYPE = 2 and $$_PUC_DEPART_ID1 != 1) or 
                                      所用人员ID                集合ID=1
    ( $$_PUB_IN_RIGHT_TYPE <=-10 and PEOPLE_SET_TYPE = 2 and PEOPLE_SET_ID1 = 1 and 
    权限方式字
    REC_RIGHT_TYPE > 0) or 
    ( $$_PUB_IN_RIGHT_TYPE <=-11 and PEOPLE_SET_TYPE is null) 如果,高手们看明白就试试吧!
    还有,我的SQL执行的效率太慢了!
    如果,使用存储工程或者优化应该怎么写。高手指教
      

  3.   

    用存储过程吧你可以参考存储过程的例子
    http://www.javaeye.com/topic/383962
    这个不错