有没有办法在MySQL中结合IN和LIKE?

abe*_*ger 4 mysql sql-like

我目前正在运行这样的查询:

SELECT *
  FROM email
 WHERE email_address LIKE 'ajones@%'
    OR email_address LIKE 'bsmith@%'
    OR email_address LIKE 'cjohnson@%'
Run Code Online (Sandbox Code Playgroud)

大量的OR人困扰我.有没有办法用类似于IN运算符的东西来浓缩它,例如:

SELECT *
  FROM email 
 WHERE email_address LIKE ('ajones@%', 'bsmith@%', 'cjohnson@%')
Run Code Online (Sandbox Code Playgroud)

或者这只是一厢情愿的想法?

Dan*_*cek 8

您也可以使用RLIKE运算符(同义词REGEXP)。

SELECT *
  FROM email 
 WHERE email_address RLIKE 'ajones@|bsmith@|cjohnson@'
Run Code Online (Sandbox Code Playgroud)

由于正则表达式匹配,可能会有一些性能损失,但对于简单的模式或小集合,这应该不是问题。有关 RLIKE 的更多信息,请参阅http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp


Jor*_*ing 6

这是我的建议:在之前提取电子邮件地址的一部分@并使用之前IN:

SELECT * FROM `email`
WHERE LEFT(`email_address`, LOCATE('@', `email_address`) - 1)
        IN ('ajones', 'bsmith', 'cjohnson')
Run Code Online (Sandbox Code Playgroud)