복붙노트

[SQL] 값의 "NOT IN"목록에 대한 MySQL의 변수 형식

SQL

값의 "NOT IN"목록에 대한 MySQL의 변수 형식

유형의 쿼리에서 변수를 설정하려고 미쳐가는 :

SET @idcamposexcluidos='817,803,495';

그래서 난 다음에 그것을 사용할 수 있습니다

WHERE id_campo not in (@idcamposexcluidos)

나는 운이 서로 다른 형식의 변수를 정의하는 시도하고 위 대한 구체적인 예를 찾을 수가 없습니다 :

SET @idcamposexcluidos='(817,803,495)';
...
WHERE id_campo not in @idcamposexcluidos


SET @idcamposexcluidos=817,803,495;

성공하지 못했다. 그것도 오류를 반환하거나 값을 무시합니다.

해결법

  1. ==============================

    1.당신은 그런 IN 절을 사용할 수 없습니다. 그것은 당신의 IN 절에서 하나의 문자열로 컴파일합니다. 그러나 IN 절은 별도의 값을 필요로한다.

    당신은 그런 IN 절을 사용할 수 없습니다. 그것은 당신의 IN 절에서 하나의 문자열로 컴파일합니다. 그러나 IN 절은 별도의 값을 필요로한다.

    WHERE id_campo not in (@idcamposexcluidos)
    

    에 컴파일

    WHERE id_campo not in ('817,803,495')
    

    하지만해야

    WHERE id_campo not in ('817','803','495')
    

    FIND_IN_SET를이 중 하나를 사용하여 동적 SQL을 극복하기 위해 또는 MySQL의에서 당신은 사용할 수 있습니다 :

    SET @idcamposexcluidos='817,803,495';
    ...
    WHERE FIND_IN_SET(id_campo, @idcamposexcluidos) = 0
    

    하지만 FIND_IN_SET 같은 () 함수를 사용하여 인덱스를 사용할 수 없습니다.

  2. ==============================

    2.당신은 MySQL의> 5.1을 사용하는 경우, 당신은 사용할 수 있습니다 :

    당신은 MySQL의> 5.1을 사용하는 경우, 당신은 사용할 수 있습니다 :

    CREATE TYPE lista as (
        clave int4,
        valor int4
    );
    
    CREATE OR REPLACE FUNCTION test(IN vArray lista[])
    ...
    
       WHERE FIND_IN_SET(id_campo, vArray)
    ...
    

    다른 경우에 당신은 트릭을 사용할 수 있습니다 :

    WHERE id_campo IN ( SELECT 817 as valor UNION ALL 
                    SELECT 803 as valor UNION ALL
                        SELECT 495 as valor)
    
  3. ==============================

    3.) (CONCAT를 사용하여 파이프 분리기 (쉼표 대신), 그리고 약간의 "반대 논리는"대신하지만, NOT 목록에서의 변수를 사용할 수 있습니다 - LIKE NOT 사용하여!

    ) (CONCAT를 사용하여 파이프 분리기 (쉼표 대신), 그리고 약간의 "반대 논리는"대신하지만, NOT 목록에서의 변수를 사용할 수 있습니다 - LIKE NOT 사용하여!

    예:

    SET @idcamposexcluidos = '|817|803|495|';
    
    SELECT
        *
    FROM
        your_table
    WHERE
        @idcamposexcluidos NOT LIKE CONCAT('%|', id_campo, '|%');
    

    이 문자열과 숫자 열 모두 모두 작동합니다.

  4. from https://stackoverflow.com/questions/11957643/mysql-variable-format-for-a-not-in-list-of-values by cc-by-sa and MIT license