2016-09-10 2 views
2

IN 절의 매개 변수로 JSON 배열을 사용할 수 있습니까 (JSON을 지원하는 버전 5.7 이상)? 다음은 "IN"절에 사용되는 MySQL JSON 배열?

DROP TABLE IF EXISTS json_table; 
    CREATE TEMPORARY TABLE json_table(  
     id INT, 
     data JSON 
    ); 

    INSERT INTO json_table (id, data) VALUES (1, "[1,2,3,4,19,20]"); 

    SELECT jt.id, jt.data, REPLACE(REPLACE(jt.data, '[', ''), ']', ''), jt.data->"$[4]" 
    FROM json_table jt; 

    SELECT stuff.name 
    FROM table_stuff stuff 
    #JOIN json_table jt ON stuff.id IN (1,2,3,4,19,20); 
    JOIN json_table jt ON stuff.id IN (REPLACE(REPLACE(jt.data, '[', ''), ']', ''));   

    DROP TABLE IF EXISTS json_table; 
+0

수 없습니다. 동적으로 빌드 (문자열) 및 실행 된 쿼리가 필요합니다. 여러분이 작성한 것처럼, 그것은 단지 하나의 'TEXT'값이다. [이 기능들] (https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html)을 대신 사용하십시오. –

+0

@KamilG. 감사합니다 Kamil – aero

답변

2

가 나는 JSON 기능이 오히려 IN보다 일을 기대 ... 나는 아주 작동되지 수있는 코드입니다. 다음과 같이 입력하십시오 :

SELECT stuff.name 
FROM table_stuff stuff JOIN 
    json_table jt 
    ON JSON_CONTAINS(jt.data, CONVERT(stuff.id, char)) = 1; 
+0

고든,'json_contains (...) = 1'은 깔끔하고 혼란을 피하기 위해 0/1/null 반환 값에 대한 논리를 따르지 않습니까? –

+0

@KamilG. . . . 예. 내가 처음 썼을 때'find_in_set()'을 생각하고 있었지만'json_contains()'는 0과 1 (그리고 아마도'NULL')만을 반환합니다. –

+0

@GordonLinoff 고든 고마워, 잘됐다! – aero