sql >> Database >  >> RDS >> Mysql

Hoe haal je alle rijen op die overeenkomen met ten minste één waarde uit de array?

Leunend op Lad2025's sqlfiddle en dit Slim antwoord van 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');

Zoekopdracht

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

Beter nog, zie opmerkingen hierboven onder vraag voor gegevensnormalisatie. Als u dat doet, kunt u wellicht optimaal gebruik maken van indexen.



  1. kruistabel met 2 (of meer) rijnamen

  2. Hoe kan ik zoeken op datum en tijd in Mysql optimaliseren?

  3. Hoe gebruik ik de CONCAT-functie in SQL Server 2008 R2?

  4. phpMyAdmin SQL-fout Niet-herkend trefwoord in de buurt van FIELDS