今天要使用一个嵌套子查询的方法,查询数据。
在原有SQL语句:
select s_splpacketname,s_splpacketcode
from JC_B_SplRepairPacket c
where s_splpacketcode not in
(select p.s_splpacketcode
from JC_B_SplRepairPacket p,jc_m_repaircore_data t
where p.s_splpacketcode = t.s_taskcode
and t.i_factrunmile != -1
and t.c_taskstate = '04'
and t.s_trainsetid = 'Train')
and c_packettype = '0' "
group by s_splpacketname,s_splpacketcode
order by s_splpacketname,s_splpacketcode
这时语句的正确性有很好的保证。
但由于机器配置,故执行非常慢。大概需要10秒左右。
听坛子上朋友说,把group by去掉。可以加快速度。大概加快1秒。
之后使用not exists代替not in没有什么效果。
突然间有位朋友告诉我使用MINUS
通过学习MINUS得知:
MINUS 指令是运用在两个 SQL 语句上。它先找出第一个 SQL 语句所产生的结果,然后看这些结果有没有在第二个 SQL 语句的结果中。如果有的话,那这一笔资料就被去除,而不会在最后的结果中出现。如果第二个 SQL 语句所产生的结果并没有存在于第一个 SQL 语句所产生的结果内,那这笔资料就被抛弃。
MINUS 的语法如下:
[SQL 语句 1]
MINUS
[SQL 语句 2]
故修改够语句为:
select s_splpacketname,s_splpacketcode from JC_B_SplRepairPacket
where s_splpacketcode in(
select distinct s_splpacketcode
from JC_B_SplRepairPacket c
where c_packettype = '0'
MINUS
select p.s_splpacketcode
from JC_B_SplRepairPacket p,jc_m_repaircore_data t
where p.s_splpacketcode = t.s_taskcode
and t.i_factrunmile != -1
and t.c_taskstate = '04'
and t.s_trainsetid = 'Train')
速度提高到0.3秒左右。
惊奇