2016-09-10 9 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/ja/json-search-functions.html)を使用してください。 –

+0

@KamilG。ありがとうKamil – aero

答えて

2

私はむしろINよりも、JSON機能が動作するように期待します。次のようなもの:

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

関連する問題