Find intersection of MySQL JSON objects or arrays Find intersection of MySQL JSON objects or arrays json json

Find intersection of MySQL JSON objects or arrays


It looks there are no good built-in ways of doing this and there are still no good answers on this topic, so I thought I'd add my quick & dirty solution. If you execute the below code it will create a function called MY_JSON_INTERSECT that will output results exactly as the original poster specified. Make sure you've looked this over and are ok with creating a new function before trusting my code:

delimiter $$CREATE FUNCTION `MY_JSON_INTERSECT`(Array1 VARCHAR(1024), Array2 VARCHAR(1024)) RETURNS varchar(1024)BEGIN    DECLARE x int;    DECLARE val, output varchar(1024);    SET output = '[]';    SET x = 0;    IF JSON_LENGTH(Array2) < JSON_LENGTH(Array1) THEN        SET val = Array2;        SET Array2 = Array1;        SET Array1 = val;    END IF;    WHILE x < JSON_LENGTH(Array1) DO        SET val = JSON_EXTRACT(Array1, CONCAT('$[',x,']'));        IF JSON_CONTAINS(Array2,val) THEN            SET output = JSON_MERGE(output,val);        END IF;        SET x = x + 1;     END WHILE;    IF JSON_LENGTH(output) = 0 THEN        RETURN NULL;    ELSE        RETURN output;    END IF;END$$

You can then call the function like this:

SELECT MY_JSON_INTERSECT('[1,2,3,4,5,6,7,8]','[0,3,5,7,9]');

Outputs:

[3,5,7]

This isn't beautiful or efficient, but it's something that works... Hopefully better answers will come soon.