Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да извлека всички редове, които съответстват на поне една стойност от масива?

Опирайки се на sqlfiddle на Lad2025 и този Умен отговор от Павел

Схема

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

Запитване

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

Още по-добре, вижте коментарите по-горе под въпрос за нормализиране на данните. Може да изберете оптимално използване на индекси, ако го направите.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySql Изберете Къде и C#

  2. Ограничете резултата от SQL заявка в MySQL

  3. Защо да използвате външни ключове без действие при изтриване или актуализиране

  4. Дата ключова дума ли е в mysql?

  5. AWS Aurora:MySQL сървърът работи с опцията --read-only, така че не може да изпълни тази инструкция