아래 SQL은 개념적으로 해결하려고하는 문제를 복제합니다. NOT IN 절을 전달 함에도 불구하고 세 개의 레코드가 모두 반환됩니다.NOT IN 절에서 구분 된 문자열 전달
SELECT * FROM (
SELECT 'JACK' AS VALUE FROM DUAL
UNION
SELECT 'JOHN' AS VALUE FROM DUAL
UNION
SELECT 'BOB' AS VALUE FROM DUAL
) WHERE VALUE NOT IN (SELECT 'BOB,JOHN' FROM DUAL);
데이터 세트에서 레코드를 제외하는 기준으로 사용하려는 구분 된 문자열을 포함하는 테이블이 있습니다. 그러나, 내가 가진 문제는 반환 된 문자열을 구분 된 항목으로 나눌 수 없습니다. 당신은 그 문제에 대한 REGEXP_SUBSTR을 사용할 수 있습니다
SELECT * FROM (
SELECT 'JACK' AS VALUE FROM DUAL
UNION
SELECT 'JOHN' AS VALUE FROM DUAL
UNION
SELECT 'BOB' AS VALUE FROM DUAL
) WHERE VALUE NOT IN ('BOB','JOHN');
https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:210612357425 – OldProgrammer
구분 된 문자열을 포함하는 테이블이 있습니까? 왜? 데이터베이스를 올바르게 사용하고 문자열을 별도로 저장 한 경우 쿼리를 작성하는 데 아무런 문제가 없습니다. –
''BOB, JOHN ''이 ** 단일 문자열 값 **이므로 3 개의 레코드가 모두 반환됩니다. 분명히 'BOB, JOHN'! = 'BOB' '그리고'BOB, JOHN '! ='JACK '그리고'BOB, JOHN '! ='JOHN '! 결과가 정확합니다. 배열 또는 테이블과 같이 더 적합한 문자열이 아닌 문자열로 컬렉션을 저장하는 것이 문제입니다. – APC