对oracle中的sql语句的理解与不解

      近期由于做前端经常要查询数据库,根据不同的条件查询的数据并展示。这里就遇到了一些sql语句的一些问题,现进行总结整理。

先将一开始我的sql语句贴出来,其中model表是查询的主要信息表,然后在not  exists中查询的是结果集是trBomPackageBiw中出现过的model的id,

   现在的问题是where的第一个条件单独运行可以得到我想要的结果,查询需要的时间在2秒左右,or后面的条件单独运行也可以得到我想要的结果,需要的时间在1秒左右,现在我想将2个单独查询的结果进行合并,也就是下面的sql语句,不报错,但是查询时间超长,我登了5分钟也没出结果,后面就放弃了,但我不明白哪里的问题?

SELECT distinct model.ID                   id,
                model.STR_SEQUENCE         strSequence,
                model.INSTANCE_NAME_ZH     instanceNameZh,
                model.INSTANCE_NAME_EN     instanceNameEn,
                model.PBOM_ID              pBomId,
                model.VARIATE_CONDITION    variateCondition,
                model.SVPPS                svpps,
                model.SHORT_SVPPS          shortSvpps,
                model.FFC                  ffc,
                model.FFC_DESCRIPTION_ZH   ffcDescriptionZh,
                model.FFC_DESCRIPTION_EN   ffcDescriptionEn,
                model.FFC_ID               ffcId,
                model.PART_TYPE            partType,
                model.PARENT_ID            parentId,
                model.ENGINEERING_LEVEL    engineeringLevel,
                model.PART_INDENTIFICATION partIndentification,
                model.QUANTITY             quantity,
                model.THICKNESS            thickness,
                model.OLD_PART_NUMBER      oldPartNumber,
                model.ThirdD_PART_NUMBER   thirdDPartNumber,
                model.ThirdD_PART_VERSION  thirdDPartVersion,
                model.PART_STATUS          partStatus,
                model.PART_PHASE           partPhase,
                model.SYMMETRY             symmetry,
                model.SYMMETRY_PART_NUMBER symmetryPartNumber,
                model.PARENT_PART          parentPart,
                model.PART_SOURCE          partSource,
                model.SW_IMPORT            swImport,
                model.EWO_ID               ewoId,
                pbom.PART_NUMBER           partNumber
  FROM BOP_TM_BIW_BOM model                       
  LEFT JOIN BOP_TM_PBOM pbom ON pbom.ID = model.PBOM_ID
  LEFT JOIN BOP_TR_BOM_PACKAGE_BIW trBomPackageBiw on model.id =
                                                      trBomPackageBiw.BIW_BOM_ID
  LEFT JOIN BOP_TM_PACKAGE bopTmpackage on bopTmpackage.ID =
                                           trBomPackageBiw.Package_Id
 where 
      not exists(
             SELECT distinct  trBomPackageBiw.Biw_Bom_Id 
             from Bop_Tr_Bom_Package_Biw trBomPackageBiw 
             where model.id=trBomPackageBiw.Biw_Bom_Id
             )AND model.DATASET_ID = 2000039
       
       or
       
       (bopTmpackage.PACKAGE_CODE = 18990 AND
       trBomPackageBiw.RELEATION_TYPE != '0')
       
       ORDER BY model.STR_SEQUENCE
后来我又用了union语句,分别查询在合并就可以了,速度很快,但这里要注意的是,我需要对查询的数据进行排序,然后我就用了order by model.strSTR_SEQUENCE语句,发现报错,进过百度知道order by 和union不能一起用,但是用order by 数字(此数字对应需要排序的字段的位置数)就可以。

还有一点union是数据集的合并,INTERSECT是数据集的交集,其他具体的可以看此处链接。oracle基础

ELECT distinct model.ID                   id,
                model.STR_SEQUENCE         strSequence,
                model.INSTANCE_NAME_ZH     instanceNameZh,
                model.INSTANCE_NAME_EN     instanceNameEn,
                model.PBOM_ID              pBomId,
                model.VARIATE_CONDITION    variateCondition,
                model.SVPPS                svpps,
                model.SHORT_SVPPS          shortSvpps,
                model.FFC                  ffc,
                model.FFC_DESCRIPTION_ZH   ffcDescriptionZh,
                model.FFC_DESCRIPTION_EN   ffcDescriptionEn,
                model.FFC_ID               ffcId,
                model.PART_TYPE            partType,
                model.PARENT_ID            parentId,
                model.ENGINEERING_LEVEL    engineeringLevel,
                model.PART_INDENTIFICATION partIndentification,
                model.QUANTITY             quantity,
                model.THICKNESS            thickness,
                model.OLD_PART_NUMBER      oldPartNumber,
                model.ThirdD_PART_NUMBER   thirdDPartNumber,
                model.ThirdD_PART_VERSION  thirdDPartVersion,
                model.PART_STATUS          partStatus,
                model.PART_PHASE           partPhase,
                model.SYMMETRY             symmetry,
                model.SYMMETRY_PART_NUMBER symmetryPartNumber,
                model.PARENT_PART          parentPart,
                model.PART_SOURCE          partSource,
                model.SW_IMPORT            swImport,
                model.EWO_ID               ewoId,
                pbom.PART_NUMBER           partNumber
  FROM BOP_TM_BIW_BOM model
  LEFT JOIN BOP_TM_PBOM pbom ON pbom.ID = model.PBOM_ID
  LEFT JOIN BOP_TR_BOM_PACKAGE_BIW trBomPackageBiw on model.id = trBomPackageBiw.BIW_BOM_ID
  LEFT JOIN BOP_TM_PACKAGE bopTmpackage on bopTmpackage.ID =trBomPackageBiw.Package_Id
 where 
      not exists(
             SELECT distinct  trBomPackageBiw.Biw_Bom_Id
             from Bop_Tr_Bom_Package_Biw trBomPackageBiw 
             where model.id=trBomPackageBiw.Biw_Bom_Id
             )AND model.DATASET_ID = 2000039
           
 union           
 SELECT distinct model.ID                   id,
                model.STR_SEQUENCE         strSequence,
                model.INSTANCE_NAME_ZH     instanceNameZh,
                model.INSTANCE_NAME_EN     instanceNameEn,
                model.PBOM_ID              pBomId,
                model.VARIATE_CONDITION    variateCondition,
                model.SVPPS                svpps,
                model.SHORT_SVPPS          shortSvpps,
                model.FFC                  ffc,
                model.FFC_DESCRIPTION_ZH   ffcDescriptionZh,
                model.FFC_DESCRIPTION_EN   ffcDescriptionEn,
                model.FFC_ID               ffcId,
                model.PART_TYPE            partType,
                model.PARENT_ID            parentId,
                model.ENGINEERING_LEVEL    engineeringLevel,
                model.PART_INDENTIFICATION partIndentification,
                model.QUANTITY             quantity,
                model.THICKNESS            thickness,
                model.OLD_PART_NUMBER      oldPartNumber,
                model.ThirdD_PART_NUMBER   thirdDPartNumber,
                model.ThirdD_PART_VERSION  thirdDPartVersion,
                model.PART_STATUS          partStatus,
                model.PART_PHASE           partPhase,
                model.SYMMETRY             symmetry,
                model.SYMMETRY_PART_NUMBER symmetryPartNumber,
                model.PARENT_PART          parentPart,
                model.PART_SOURCE          partSource,
                model.SW_IMPORT            swImport,
                model.EWO_ID               ewoId,
                pbom.PART_NUMBER           partNumber
  FROM BOP_TM_BIW_BOM model
  LEFT JOIN BOP_TM_PBOM pbom ON pbom.ID = model.PBOM_ID
  LEFT JOIN BOP_TR_BOM_PACKAGE_BIW trBomPackageBiw on model.id =trBomPackageBiw.BIW_BOM_ID
  LEFT JOIN BOP_TM_PACKAGE bopTmpackage on bopTmpackage.ID = trBomPackageBiw.Package_Id
  where  bopTmpackage.PACKAGE_CODE = 18990 AND
         trBomPackageBiw.RELEATION_TYPE != '0'
         ORDER BY  2



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值