sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo comparo dos filas y almaceno las similitudes de las dos filas en otra columna?

He hecho algo similar al tratar listas de ID separadas por comas para emular máscaras de bits. El truco es hacer una unión usando como '%, id,% (donde id es la clave en una tabla indexada por id). Para su caso, uno table_1 a una tabla de enteros secuenciados y el resultado incluye una fila para cada id en su columna product_id.

Hago esto una vez por cada ID que solicita y me uno a las tablas derivadas resultantes para encontrar las comunes.

Aquí está la consulta:

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