sql >> Databáze >  >> RDS >> Mysql

Jak načíst všechny řádky, které odpovídají alespoň jedné hodnotě z pole?

Opírající se o sqlfiddle Lad2025 a tato chytrá odpověď od Pavla

Schéma

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

Dotaz

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

Ještě lépe, podívejte se na komentáře výše pod otázkou pro normalizaci dat. Pokud to uděláte, můžete získat optimální využití indexů.



  1. Vytvořte pole v PHP z mysql

  2. mysql objednávka varchar pole jako celé číslo

  3. 3 způsoby, jak najít řádky, které obsahují velká písmena v MySQL

  4. Použití replikačních slotů PostgreSQL