sql >> Databasteknik >  >> RDS >> Mysql

Hur man jämför två kommaseparerade stränglistor med MySQL

Det verkar som om du vill göra en arrayskärning, förutom att din array är en enda kolumn. Det kan göras, men det kommer att vara långsamt, svårt att felsöka och kommer inte att utnyttja kraften i relationsdatabaser. Ett bättre sätt skulle vara att ändra ditt tabellschema till något i stil med detta:

Tabellgrupper

group_id int unsigned not null auto_increment primary key,
character_list text

Tabellmedlemmar_i_grupp

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

Sedan kan du fråga så här:

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

groups tabellen är förmodligen mycket lik din nuvarande tabell. members_in_groups Tabellen är samma data uppdelad i lättsökbara delar.

ETA givet din kommentar borde detta fungera om du kan garantera att varje character_list innehåller bara en instans av varje tecken:

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;

I det här fallet HAVING klausul måste vara lika med 3 eftersom det finns 3 medlemmar i IN ('Mr. T', 'Apollo', 'Rocky') .



  1. Hur man åtgärdar "ALTER TABLE SWITCH-satsen misslyckades"

  2. någon gräns för antalet SQL Server-anslutningar?

  3. Kan jag köra flera frågor separerade med semikolon med MySQL Connector/J?

  4. MySQL-attributdatabas