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

Jak napsat dotaz MySQL, kde A obsahuje (a nebo b)

Dvě možnosti:

  1. Použijte LIKE klíčové slovo spolu se znaky procent v řetězci

    select * from table where field like '%a%' or field like '%b%'.
    

    (poznámka:Pokud váš hledaný řetězec obsahuje znaky procent, budete je muset escapovat)

  2. Pokud hledáte složitější kombinaci řetězců, než jste uvedli ve svém příkladu, můžete regulární výrazy (regulární výrazy):

    Více o tom, jak je používat, najdete v příručce MySQL:http:/ /dev.mysql.com/doc/refman/5.1/en/regexp.html

Z toho pomocí LIKE je nejběžnější řešení -- je to standardní SQL a běžně se používá. Regex je méně běžně používaný, ale mnohem výkonnější.

Všimněte si, že ať zvolíte kteroukoli možnost, musíte si být vědomi možných dopadů na výkon. Hledání podřetězců, jako je tento, bude znamenat, že dotaz bude muset prohledat celou tabulku. Pokud máte velkou tabulku, může to způsobit velmi pomalý dotaz a žádné indexování vám nepomůže.

Pokud je to pro vás problém a budete muset hledat stejné věci znovu a znovu, můžete raději udělat něco jako přidání pole příznaku do tabulky, které určuje, že pole řetězce obsahuje relevantní pod- struny. Pokud udržujete toto pole příznaku aktuální, když vkládáte nebo aktualizujete záznam, můžete se jednoduše dotazovat na příznak, když chcete hledat. To lze indexovat a váš dotaz by byl mnohem rychlejší. Zda vám to stojí za námahu, je na vás, bude záležet na tom, jak špatný je výkon pomocí LIKE .



  1. SQL - Jak objednávat pomocí počítání z jiné tabulky

  2. Kdy by měly být indexy databáze přestavěny?

  3. MySQL Delete s Group By

  4. Jak vrátit počet sekund po půlnoci v databázi Oracle