Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie vergleiche ich zwei Zeilen und speichere die Ähnlichkeiten der beiden Zeilen in einer anderen Spalte

Ich habe etwas Ähnliches getan, indem ich durch Kommas getrennte Listen von IDs behandelt habe, um Bitmasken zu emulieren. Der Trick besteht darin, einen Join mit '%,id,%' durchzuführen (wobei id der Schlüssel in einer Tabelle ist, die durch id indiziert ist). Für Ihren Fall verbinde ich table_1 mit einer Tabelle aus aufeinanderfolgenden Ganzzahlen und das Ergebnis enthält eine Zeile für jede ID in Ihrer Spalte product_id.

Ich tue dies einmal für jede ID, die Sie anfordern, und verbinde die resultierenden abgeleiteten Tabellen, um die gemeinsamen zu finden.

Hier ist die Abfrage:

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