任何人有任何想法,爲什麼當我試圖運行此查詢時,它只是運行永遠不會停止??Oracle SQL - 左加2表不運行
「With」子句中的查詢自行運行正常。只是當我嘗試加入他們,我無法讓它正常運行?
--Process name and input
With ProcessIn as
(
select Data.Scan_time, equipment.equipment_desc, data.serial_number
from Data, equipment
where Data.equipment = equipment.equipm_barcode and data.quality_plan = 'N/A' and data.error_code = 'N/A'
)
--Total process defects
,ProcessDefect as
(
select Data.Scan_time, equipment.equipment_desc, data.serial_number
from Data, equipment
where Data.equipment = equipment.equipm_barcode and (data.quality_plan <> 'N/A' or data.error_code <> 'N/A')
)
Select concat(to_char(ProcessIn.SCAN_TIME, 'mm'), to_char(ProcessIn.SCAN_TIME, 'dd')) as "Date", ProcessIn.equipment_desc, count(ProcessIn.serial_number), count(ProcessDefect.serial_number)
from ProcessIn
Left Join ProcessDefect
On concat(to_char(ProcessIn.SCAN_TIME, 'mm'),to_char(ProcessIn.SCAN_TIME, 'dd')) = concat(to_char(ProcessDefect.SCAN_TIME, 'mm'),to_char(ProcessDefect.SCAN_TIME, 'dd'))
and ProcessIn.equipment_desc = ProcessDefect.equipment_desc
group by concat(to_char(ProcessIn.SCAN_TIME, 'mm'), to_char(ProcessIn.SCAN_TIME, 'dd')), ProcessIn.equipment_desc
;
UPDATE 20110816 我用了一些建議,以改進我的查詢,但沒有成功。有人有其他建議嗎?此外,無論如何檢查我的索引是正確使用,因爲我是新的創建/使用它們。我只是使用Oracle接口來創建基於serial_number和smalldate的索引。
感謝
With ProcessIn as
(
select data.smalldate, mip.mip_step_description, data.part_serial_number
from Data, MIP
where Data.equipment = MIP.equipment and data.quality_plan is null and data.error_code is null
)
,ProcessDefect as
(
select data.smalldate, mip.mip_step_description, data.part_serial_number
from Data, MIP
where Data.equipment = MIP.equipment and (data.quality_plan is not null or data.error_code is not null)
)
Select ProcessIn.smalldate, ProcessIn.mip_step_description, count(ProcessIn.part_serial_number), count(ProcessDefect.part_serial_number)
from ProcessIn
Left Join ProcessDefect
On ProcessIn.smalldate = ProcessDefect.smalldate
and ProcessIn.mip_step_description = ProcessDefect.mip_step_description
group by ProcessIn.smalldate, ProcessIn.mip_step_description
UPDATE 110820
所以我已經取得一些進展,但需要幫助搞清楚最後一兩件事。我改變了查詢結構看現在這個樣子
select data.smalldate, mip.mip_step_description, error_code.error_code_en, count(case when (error_code is null and quality_plan is null) then data.part_serial_number end) as "Input", count(case when error_code is not null then data.part_serial_number end) as "Defects"
from Data
left join MIP
On data.equipment = mip.equipment
left join error_code
on data.error_code = error_code.error_code_sn
group by data.smalldate, mip.mip_step_description, error_code.error_code_en
order by data.smalldate, mip.mip_step_description, count(data.part_serial_number) desc
正如你可以看到在SELECT語句中,我使用的是在我的計數功能case語句。這工作正常。數據輸出像這樣
Date MIP_Desc Error_Code Input Defects
1/1/2011 MIP Z (null) 100 0
1/1/2011 MIP Z A 0 10
1/1/2011 MIP Z B 0 15
我想在輸入欄相同的輸入值,以填補整個具有相同的日期和MIP的所有行。
輸出應該是這樣的
Date MIP_Desc Error_Code Input Defects
1/1/2011 MIP Z (null) 100 0
1/1/2011 MIP Z A 100 10
1/1/2011 MIP Z B 100 15
任何提示?再次感謝您的幫助
請張貼的查詢計劃。這很可能是因爲查詢確實非常昂貴,或者選擇了一個差的查詢計劃。 – Codo
你的查詢結構的方式,查詢表涉及兩次查詢,並通過'equipment_desc'列加入,這個列不太可能被索引。難道不可能通過索引列加入,甚至更好,只涉及一次? – Codo
偏離主題,但你應該停止使用隱含連接語法。這是一種SQL Antipattern和非常糟糕的編程技術。 – HLGEM