sql >> Database >  >> RDS >> Mysql

Hoe twee door komma's gescheiden tekenreekslijsten te vergelijken met MySQL

Het lijkt erop dat u een matrixdoorsnijding wilt maken, behalve dat uw matrix een enkele kolom is. Het kan worden gedaan, maar het zal traag zijn, moeilijk te debuggen en zal geen gebruik maken van de kracht van relationele databases. Een betere manier zou zijn om uw tabelschema in iets als dit te veranderen:

Tafelgroepen

group_id int unsigned not null auto_increment primary key,
character_list text

Table members_in_group

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

Dan kun je als volgt opvragen:

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

De groups tafel lijkt waarschijnlijk erg op uw huidige tafel. De members_in_groups tabel is dezelfde data opgedeeld in gemakkelijk doorzoekbare delen.

ETA gezien je reactie, zou dit moeten werken als u kunt garanderen dat elke character_list bevat slechts één instantie van elk teken:

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;

In dit geval de HAVING clausule moet gelijk zijn aan 3 omdat er 3 leden zijn in IN ('Mr. T', 'Apollo', 'Rocky') .



  1. Hoe NIET RLIKE werkt in MySQL

  2. Muziekbibliotheek MySQL-database

  3. Verwijderen - Ik kan de doeltabel niet specificeren?

  4. Laravel Raw Query gebruiken met tijdelijke aanduiding