Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak pobrać wszystkie wiersze, które pasują do przynajmniej jednej wartości z tablicy?

Opierając się na sqlfiddle i ta sprytna odpowiedź od Pawła

Schemat

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

Zapytanie

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

Jeszcze lepiej, zobacz powyższe komentarze dotyczące normalizacji danych. Możesz wybrać optymalne wykorzystanie indeksów, jeśli to zrobisz.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chcesz ustawić limit MySql na każdy warunek?

  2. jak wybrać wiersz, w którym jedna z kilku kolumn ma określoną wartość?

  3. Licznik odwiedzających Laravel

  4. Problemy z typem danych int(11) w MYSQL

  5. Jak utworzyć fałszywe kolumny zmiennych dla tysięcy kategorii w Google BigQuery?