Mysql
 sql >> Base de données >  >> RDS >> Mysql

comment comparer deux lignes et stocker les similitudes des deux lignes dans une autre colonne

J'ai fait quelque chose de similaire en traitant des listes d'ID séparées par des virgules pour émuler des masques de bits. L'astuce consiste à faire une jointure en utilisant comme '%,id,% (où id est la clé dans une table indexée par id). Dans votre cas, je joins table_1 à une table d'entiers séquencés et le résultat inclut une ligne pour chaque identifiant dans votre colonne product_id.

Je le fais une fois pour chaque identifiant que vous demandez et je joins les tables dérivées résultantes pour trouver les plus communes.

Voici la requête :

SELECT p1.id, p1.name name1,p2.name name2, GROUP_CONCAT(p1.N) similarities
FROM (
SELECT *
 FROM table_1 t1
JOIN sequence8 s8 on CONCAT(',',t1.product_ids,',') LIKE CONCAT('%,',s8.N,',%') 

WHERE t1.id =1
) p1
JOIN 
(
SELECT *
 FROM table_1 t1
JOIN sequence8 s8 ON CONCAT(',',t1.product_ids,',') LIKE CONCAT('%,',s8.N,',%') 

WHERE t1.id =4
) p2 ON p2.n = p1.n
GROUP BY p1.id