在MySQL中,如何获取包含预定义列表中至少两个字符的所有字符串

Mul*_*ner 2 mysql sql string select

我有一个字符串表,并希望检索包含预定义列表中至少两个字符的所有行.通过示例更好地解释:

我的表看起来像这样:

Id|Word
 1|Cat
 2|Chicken
 3|Dog
 4|Elephant
 5|Fish
 6|Goat
Run Code Online (Sandbox Code Playgroud)

这可能是我的名单:

Characterlist = 'A', 'B', 'C', 'E'
Run Code Online (Sandbox Code Playgroud)

然后,select语句应返回:Cat,Chicken,Elephant

我查看了mySQL文档中的字符串函数,但找不到合适的函数来执行此操作.它甚至可能吗?

Mic*_*ski 5

这是一种低效的方法,它依赖于添加布尔条件返回的0或1:

SELECT
  *,
  (
    (UPPER(Word) LIKE '%A%') +
    (UPPER(Word) LIKE '%B%') + 
    (UPPER(Word) LIKE '%C%') + 
    (UPPER(Word) LIKE '%D%') 
  ) AS lettermatches
FROM yourtable
HAVING lettermatches >= 2
Run Code Online (Sandbox Code Playgroud)

LIKE各条件返回一个0或1的那些相加在一起,并且HAVING条款限制结果来得分2或更大的行.

使用它可能更快LOCATE()而不是LIKE:

SELECT
  *,
  (
    (LOCATE('A', UPPER(Word)) > 0) +
    (LOCATE('B', UPPER(Word)) > 0) + 
    (LOCATE('C', UPPER(Word)) > 0) + 
    (LOCATE('D', UPPER(Word)) > 0) 
  ) AS lettermatches
FROM yourtable
HAVING lettermatches >= 2
Run Code Online (Sandbox Code Playgroud)