내 pl / sql 문에 문제가 있습니다.
이것은 잘 작동하는 select 문입니다.
SELECT P.DAYS FROM PLPLANPEAKPROGRAM P WHERE P.ID = 1060;
보고; 1,2,3 (varchar2)
주요 SQL은 다음과 같습니다.
SELECT *
from FIFLIGHTS
LEFT JOIN PLPLANPEAKPROGRAMCOPY ON FIFLIGHTS.IATACODE = PLPLANPEAKPROGRAMCOPY.STATIONCODE
WHERE TO_CHAR(FIFLIGHTS.SCHEDULEDTIME, 'D') IN (SELECT P.DAYS
FROM PLPLANPEAKPROGRAM P
WHERE P.ID = 1060) ;
그러나 이것은 어떤 결과도 반환하지 않습니다.
또한 위의 내용이 잘 반환됩니다.
SELECT *
from FIFLIGHTS
LEFT JOIN PLPLANPEAKPROGRAMCOPY ON FIFLIGHTS.IATACODE = LPLANPEAKPROGRAMCOPY.STATIONCODE
WHERE TO_CHAR(FIFLIGHTS.SCHEDULEDTIME, 'D') IN (1,2,3);
문제와 해결책은 무엇입니까?
너는 ~라고 말한다:
SELECT P.DAYS
FROM PLPLANPEAKPROGRAM P
WHERE P.ID = 1060;
를 반환 1,2,3
합니다. 즉, 단일 문자열 값을 반환합니다. 세 가지 요소가있는 목록이 아닙니다. to_char()
함수 호출과 같은 단일 값을 반환 1
또는 2
. 쉼표가 없으므로 일치 할 수 없습니다.
이것은 잘못된 데이터 형식입니다. 행당 하나의 요소로 목록을 저장해야합니다. SQL은 테이블이라는 목록을 저장하는 매우 강력한 방법을 제공합니다. 즉, 다음을 사용하여이 문제를 해결할 수 있습니다 exists
.
SELECT *
from FIFLIGHTS LEFT JOIN
PLPLANPEAKPROGRAMCOPY
ON FIFLIGHTS.IATACODE = PLPLANPEAKPROGRAMCOPY.STATIONCODE
WHERE EXISTS (SELECT 1
FROM PLPLANPEAKPROGRAM P
WHERE P.ID = 1060 and
P.DAYS LIKE '%' || TO_CHAR(FIFLIGHTS.SCHEDULEDTIME, 'D') || '%'
);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다