简体   繁体   中英

How can I iterate a JSON in SQL?

So I have a JSON variable with several values like this:

"["1", "2", "3", "4"]"

What i need to do is pass that value to an SQL procedure to mount a query in which the WHERE clause adds all the values in the JSON, so something like parsing the JSON, interate it and concat it in order to get an @where similar to:

AND id=1 AND id=2 AND id=3 AND id=4

I tried something like this, as something really similar is taking place in an already existing procedure, but doesn't work:

SET @idWhere="";

IF id IS NOT NULL AND JSON_EXTRACT(id, '$[0]') IS NOT NULL THEN
    SET @idWhere = CONCAT(@idWhere," AND JSON_SEARCH('",id,"','one',id) IS NOT NULL ");
END IF;

Where id is both the name of the JSON and the column name.

Thanks in advance!

If you are running MySQL 8.0, you can use json_table() to turn the array to a recordset, and then aggregate the results with group_concat() :

select group_concat(concat('id = ', i) separator ' and ') id_where
from json_table(
    '["1", "2", "3", "4"]',
    "$[*]" columns(i int path '$')
) as t

In this demo on DB Fiddle , this yields:

| id_where                                |
| --------------------------------------- |
| id = 1 and id = 2 and id = 3 and id = 4 |

NB: you probably want or s, not and s.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM