您的位置:首页 > 数据库 > Oracle

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

2017-02-04 17:25 162 查看
      近期由于做前端经常要查询数据库,根据不同的条件查询的数据并展示。这里就遇到了一些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.I
4000
D = trBomPackageBiw.Package_Id
where bopTmpackage.PACKAGE_CODE = 18990 AND
trBomPackageBiw.RELEATION_TYPE != '0'
ORDER BY 2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql oracle