내가 함께 여러 차례에 별칭을 통해 테이블을 참조하는 쿼리를 가하고있어, 그러나 그 다음 상태로 진행 :오라클 SQL 쿼리 - 제발 도와주세요
* ORA-00904 : "MPAN_STATUS" "MPANCORE". : 유효하지 않은 식별자 00904. 00000 - "% s의 : 유효하지 않은 식별자" * 원인 :
작업 : 라인에서 오류 : 43 칼럼 : 126
쿼리는 다음과 같다 :
SELECT readings.mpancore, mtds.meterid, (SELECT CASE
WHEN meter_type
LIKE 'RCAM%' AND
retrieval_method = 'R'
THEN 'TRUE'
ELSE 'FALSE' END
FROM edmgr.mtds
WHERE meter_removed IS NULL) "IS_SMART",
(SELECT CASE
WHEN flowversion = 'D0010' AND
readings.filename IS NOT NULL AND
readings.filedate >= mpan_status.ssd
THEN 'TRUE'
ELSE 'FALSE' END
FROM edmgr.readings, edmgr.mpan_status
WHERE readings.mpancore = mpan_status.mpancore) "D0010_RECEIVED",
(SELECT CASE
WHEN effective_from_date >= mpan_status.ssd AND
dc_id = mpan_status.confirmed_dc_id
THEN 'TRUE'
ELSE 'FALSE' END
FROM edmgr.D0019_reg, edmgr.mpan_status) "D0019_RECEIVED",
(SELECT CASE
WHEN file_date_time <= SYSDATE-409
THEN 'TRUE'
ELSE 'FALSE' END
FROM edmgr.D0019_reg) "RF_READ",
(SELECT CASE
WHEN file_date_time <= SYSDATE-220
THEN 'TRUE'
ELSE 'FALSE' END
FROM edmgr.D0019_reg) "R3_READ",
(SELECT CASE
WHEN file_date_time <= SYSDATE-118
THEN 'TRUE'
ELSE 'FALSE' END
FROM edmgr.D0019_reg) "R2_READ",
(SELECT CASE
WHEN file_date_time <= SYSDATE-56
THEN 'TRUE'
ELSE 'FALSE' END
FROM edmgr.D0019_reg) "R1_READ"
FROM edmgr.mpan_status "mpan_status" LEFT JOIN edmgr.D0019_reg "D0019" ON mpan_status.mpancore = D0019.metering_system_id
LEFT JOIN edmgr.readings "readings" ON mpan_status.mpancore = readings.mpancore
LEFT JOIN edmgr.mtds "mtds" ON readings.mpancore = mtds.mpancore
AND D0019.metering_system_id = mtds.mpancore
AND mtds.meterid = readings.meterid
저는 정말 초보자이기 때문에 도움을 주시면 대단히 감사하겠습니다.
아침 Pjama, 답변 해 주셔서 대단히 감사합니다. 그러나 저는 대소 문자를 구분했으며 이는 쿼리 전체에서 일관됩니다 - 대문자를 사용하는 오류 코드 일뿐입니다! 쿼리의 모든 텍스트를 대문자로 변환해야합니까? – HendrixAndChill
아니요, 모두 대문자로 변환하지 마십시오. 대문자의 불일치가 있는지 확인하십시오. 모든 조인에서 테이블 별칭을 만드는 이유가 있습니까? (예를 들어, edmgr.D0019_reg "D0019"... D0019.metering_system_id로 참조하십시오.) – pjama
별칭을 피하십시오 (지금은 쿼리를 단순화하기 위해). D0019 별칭 대신 D0019_reg를 사용하십시오. – pjama