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

Wie rufe ich alle Zeilen ab, die mit mindestens einem Wert aus dem Array übereinstimmen?

In Anlehnung an sqlfiddle von Lad2025 und diese Clevere Antwort von 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');

Abfrage

-- 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 |
+----+-------+

Besser noch, siehe Kommentare oben unter Frage zur Datennormalisierung. Wenn Sie dies tun, können Sie möglicherweise eine optimale Nutzung von Indizes erreichen.