sql语句因语句太长或者太复杂

u010302403 2013-08-28 06:40:01
select a.*, PUR_CONT_LIST_CONTRACT.PUR_CONT_VERIFY_NO from
(SELECT PUR_CONT_BASE_INFO.* FROM PUR_CONT_BASE_INFO PUR_CONT_BASE_INFO LEFT JOIN (
SELECT PM.USABLE_STATUS USABLE_STATUSS, PM.PROJ_NO, PM.PUR_CONT_BASE_INFO_ID PUR_CONT_BASE_INFO_IDS FROM V_PUR_CONT_LIST_MATE_ALL PM
WHERE PM.USABLE_STATUS='1') M ON PUR_CONT_BASE_INFO.PUR_CONT_BASE_INFO_ID = M.PUR_CONT_BASE_INFO_IDS
WHERE PUR_CONT_BASE_INFO.USABLE_STATUS = '1' AND PUR_CONT_BASE_INFO.IS_HISTORY_VERSION <> '1' AND 1=1 AND (M.PROJ_NO = 'ZEC13BA0B00002.121001') AND PUR_CONT_BASE_INFO_ID in (
( select PUR_CONT_BASE_INFO_ID from PUR_CONT_BASE_INFO q where USABLE_STATUS='1' and q.PUR_MANAGER_CODE like '109910040000000000100001000010000[1,3,4,5,6,7]%' or q.PUR_MANAGER_CODE like '1099100400000000001000010000[2,3,4,5]%' UNION ALL SELECT PUR_CONT_BASE_INFO_ID FROM PUR_CONT_BASE_INFO ) ) AND ((AUDIT_STATE='003' and CONT_STATE IN ('001','002') )
or (CONT_STATE IN ('001','002','007','008','011','004'))) ) a left outer join PUR_CONT_LIST_CONTRACT on a.PUR_CONT_BASE_INFO_ID= PUR_CONT_LIST_CONTRACT.PUR_CONT_BASE_INFO_ID ORDER BY a.CREATE_DATE DESC, a.CONT_STATE asc
此为sql语句,我在模糊查询的时候报错,提出来sql,DB2提示我 -101 54001 SQL语句超出了已确定的DB2限制:例如,表的数目太多,语句中的字节太多 ,,我到DBA上
...全文
279 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmakebest 2013-08-29
  • 打赏
  • 举报
回复
这不是 MSSQLServer 啊?如果是的话这么点根本不长的。 建立把多余的空格去去掉吧。
---涛声依旧--- 2013-08-29
  • 打赏
  • 举报
回复
建议楼主将经常查询的关联表做成视图
Shawn 2013-08-28
  • 打赏
  • 举报
回复
--有两个有问题的地方:
SELECT  a.* ,
        y.PUR_CONT_VERIFY_NO
FROM    ( SELECT    x.*
          FROM      PUR_CONT_BASE_INFO x
                    LEFT JOIN ( SELECT  PM.USABLE_STATUS USABLE_STATUSS ,
                                        PM.PROJ_NO ,
                                        PM.PUR_CONT_BASE_INFO_ID PUR_CONT_BASE_INFO_IDS
                                FROM    V_PUR_CONT_LIST_MATE_ALL PM
                                WHERE   PM.USABLE_STATUS = '1'
                              ) M ON x.PUR_CONT_BASE_INFO_ID = M.PUR_CONT_BASE_INFO_IDS
          WHERE     x.USABLE_STATUS = '1'
                    AND x.IS_HISTORY_VERSION <> '1'
                    AND 1 = 1
                    AND ( M.PROJ_NO = 'ZEC13BA0B00002.121001' )
                    AND PM.UR_CONT_BASE_INFO_ID IN ( ( SELECT PUR_CONT_BASE_INFO_ID
                                                     FROM   PUR_CONT_BASE_INFO q	--#1.UNION ALL的记录出自同一张表(这部分记录有过滤条件)
                                                     WHERE  USABLE_STATUS = '1'
                                                            AND (q.PUR_MANAGER_CODE LIKE '109910040000000000100001000010000[1,3,4,5,6,7]%'
                                                            OR q.PUR_MANAGER_CODE LIKE '1099100400000000001000010000[2,3,4,5]%')	--#2.这儿估计是少了一个括号
                                                     --UNION ALL
                                                     --SELECT PUR_CONT_BASE_INFO_ID
                                                     --FROM   PUR_CONT_BASE_INFO	--#1.UNION ALL的记录出自同一张表(这儿用IN的话,union all前部分的SQL,就可以省略了)
                                                   )
                                              )
                    AND ( ( AUDIT_STATE = '003'
                            AND CONT_STATE IN ( '001', '002' )
                          )
                          OR ( CONT_STATE IN ( '001', '002', '007', '008',
                                               '011', '004' ) )
                        )
        ) a
        LEFT OUTER JOIN PUR_CONT_LIST_CONTRACT y ON a.PUR_CONT_BASE_INFO_ID = y.PUR_CONT_BASE_INFO_ID
ORDER BY a.CREATE_DATE DESC ,
        a.CONT_STATE ASC
u010302403 2013-08-28
  • 打赏
  • 举报
回复
嗯呢 我试试 谢谢
Andy__Huang 2013-08-28
  • 打赏
  • 举报
回复
建议你把in关联查询改为inner join 关联查询
u010302403 2013-08-28
  • 打赏
  • 举报
回复
没人么

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧