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

MySQL vyhledá v poli 1,2,3,11,22,33

Za prvé, použití hodnot oddělených čárkami v poli je problematické a měli byste zvážit jejich uložení do samostatné tabulky. Pak byste mohli získat záznam efektivněji:

select ...
from mainTable t
inner join valueTable v1 on v1.id = t.id and v1.value = 1
inner join valueTable v2 on v2.id = t.id and v2.value = 2
inner join valueTable v3 on v3.id = t.id and v3.value = 3

Pokud to není možné, musíte jít cestou pomalého porovnávání řetězců. Chcete-li porovnat hodnoty v řetězci odděleném čárkou, můžete použít like operátor:

... where
  concat(',', someField, ',') like '%,1,%' and
  concat(',', someField, ',') like '%,2,%' and
  concat(',', someField, ',') like '%,3,%'

Umístěním oddělovače na obě strany hledané hodnoty zajistíte, že nedostanete žádné falešně pozitivní výsledky. Přidáním čárek před a za hodnotu pole zajistíte, že najdete první a poslední hodnotu.



  1. Jak udělit vzdálený přístup k MySQL pro celou podsíť?

  2. Dobrá reference pro Oracle PL/SQL

  3. Jak zašifrovat uživatelem definovanou funkci na serveru SQL Server

  4. Dostávám mnoho vybraných @@session.tx_read_only, udělal by jeden totéž?