누구나 왜이 쿼리를 실행하려고하면 영원히 멈추지 않고 멈추지 않을까요?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는 20,110,816 내가 성공하지 내 쿼리를 수정하기 위해 제안의 일부를 사용했습니다. 아무도 다른 제안이 있습니까? 또한 어쨌든 내 색인이 제대로 작성되고 사용되는지 확인해야합니다. 난 오라클 인터페이스를 사용하여 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 문에서 볼 수 있듯이 count 함수 내에서 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
모든 팁 모양을한다? SQL 서버에서
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'))
이 : 도움
쿼리 계획을 게시하시기 바랍니다. 실제로 쿼리가 매우 비싸거나 쿼리 계획이 잘못 선택되었을 가능성이 있습니다. – Codo
당신이 쿼리를 구성한 방식으로, 테이블'equipment'는 질의에 두 번 참여하고'equipment_desc' 열을 통해 조인됩니다.이 열은 인덱싱되지 않습니다. 인덱싱 된 열을 통해 조인하는 것이 가능하지 않습니까? – Codo
주제를 벗어나지 만 묵시적 조인 구문 사용을 중단해야합니다. 그것은 SQL Antipattern이며 매우 나쁜 프로그래밍 기술입니다. – HLGEM