sql >> Database teknologi >  >> RDS >> Mysql

Hvordan henter man alle rækker, der matcher mindst én værdi fra array?

Læner sig på Lad2025s sqlfiddle og dette kloge svar fra Pavel

Skema

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');
 

Forespørgsel

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

Endnu bedre, se kommentarer ovenfor under spørgsmål for datanormalisering. Hvis du gør det, kan du måske få optimal brug af indekser.



  1. Sådan omdøbes en JSON-nøgle i SQL Server (T-SQL)

  2. Forberedt erklæring, der ikke lader mig kalde $mysqli->stmt_init()

  3. SUPER privilegier for denne handling

  4. pyodbc håndterer ikke unicode-data korrekt