Il semble qu'il n'y a pas de bonne intégré façons de faire cela et il n'y a toujours pas de bonnes réponses sur ce sujet, donc je pensais que j'ajouterais ma solution & sale. Si vous exécutez le code ci-dessous, il créera une fonction appelée MY_JSON_INTERSECT qui produira des résultats exactement comme l'affiche originale spécifiée. Assurez-vous que vous avez regardé encore et êtes ok avec la création d'une nouvelle fonction avant de faire confiance mon 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$$
Vous pouvez alors appeler la fonction comme ceci:
SELECT MY_JSON_INTERSECT('[1,2,3,4,5,6,7,8]','[0,3,5,7,9]');
Sorties:
[3,5,7]
Ce n'est pas beau ou efficace, mais c'est quelque chose qui fonctionne ... Espérons que de meilleures réponses viendront bientôt.
Veuillez expliquer la structure de vos tables SQL – Dimgold
@Dimgold Pas de tables. La question a été mise à jour avec plus de détails. – Yochanan
Je crois que sql n'analyse pas les tableaux dont vous avez besoin pour définir une fonction qui compare les array array en utilisant [regex] (https://stackoverflow.com/questions/9099469/mysql-select-like-or-regexp-to-match-multiple- mots-en-un-enregistrement) ou [délimiteurs] (https://stackoverflow.com/questions/3914199/split-strings-using-mysql) – Abra001