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

Cómo comparar dos listas de cadenas separadas por comas usando MySQL

Parece que desea hacer una intersección de matriz, excepto que su matriz es una sola columna. Se puede hacer, pero será lento, difícil de depurar y no aprovechará el poder de las bases de datos relacionales. Una mejor manera sería cambiar el esquema de su tabla a algo como esto:

Grupos de mesa

group_id int unsigned not null auto_increment primary key,
character_list text

Miembros de la tabla_en_grupo

group_id int unsigned not null,
group_member varchar(45) not null

Entonces puedes consultar así:

SELECT group_id, character_list
FROM groups g 
  JOIN members_in_groups m USING (group_id)
WHERE m.group_member IN ('Mr. T', ...);

Los groups table es probablemente muy parecida a su mesa actual. Los members_in_groups la tabla son los mismos datos divididos en partes fáciles de buscar.

ETA dado su comentario, esto debería funcionar si puede garantizar que cada character_list contiene solo uno instancia de cada carácter:

SELECT group_id, 
       SUM(CASE m.group_member IN ('Mr. T', 'Apollo', 'Rocky') THEN 1 ELSE 0 END) AS tally, 
       character_list
FROM groups g
  JOIN members_in_groups m ON (g.group_id=m.group_id)
GROUP BY group_id
  HAVING SUM(CASE m.group_member IN ('Mr. T', 'Apollo', 'Rocky') THEN 1 ELSE 0 END) = 3;

En este caso el HAVING la cláusula debe ser igual a 3 porque hay 3 miembros en IN ('Mr. T', 'Apollo', 'Rocky') .