sql >> Databasteknik >  >> RDS >> Mysql

Hur hämtar man alla rader som matchar minst ett värde från arrayen?

Lutar dig mot Lad2025:s sqlfiddle och detta smarta svar från Pavel

Schema

CREATE TABLE tab(
   id   INTEGER  NOT NULL PRIMARY KEY 
  ,sets VARCHAR(6) NOT NULL
);
INSERT INTO tab(id,sets) VALUES (1,'1');
INSERT INTO tab(id,sets) VALUES (2,'1,2');
INSERT INTO tab(id,sets) VALUES (3,'1,2,4');
INSERT INTO tab(id,sets) VALUES (4,'1,2,6');
INSERT INTO tab(id,sets) VALUES (5,'3,8,9');
INSERT INTO tab(id,sets) VALUES (6,'7,8,9');
INSERT INTO tab(id,sets) VALUES (7,'5,8,9');

Fråga

-- 1,2,3,6 ... seek this

select * from tab 
WHERE CONCAT(",", `sets`, ",") REGEXP ",(1|2|3|6),";
+----+-------+
| id | sets  |
+----+-------+
|  1 | 1     |
|  2 | 1,2   |
|  3 | 1,2,4 |
|  4 | 1,2,6 |
|  5 | 3,8,9 |
+----+-------+

Ännu bättre, se kommentarerna ovan under frågan för datanormalisering. Du kan få optimal användning av index om du gör det.



  1. Hur man genererar DB-testdata

  2. Hur ringer man upp MySQL lagrad procedur från Rails?

  3. Använd OBJECTPROPERTY() för att ta reda på om en tabell är en systemtabell i SQL Server

  4. Mysql skapa databas med ny databasplats