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

时间:2010-05-24 20:29:33

标签: mysql sql-like

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

SELECT *
  FROM email
 WHERE email_address LIKE 'ajones@%'
    OR email_address LIKE 'bsmith@%'
    OR email_address LIKE 'cjohnson@%'

大量OR让我感到困扰。有没有办法用类似于IN运算符的东西来压缩它,例如:

SELECT *
  FROM email 
 WHERE email_address LIKE ('ajones@%', 'bsmith@%', 'cjohnson@%')

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

2 个答案:

答案 0 :(得分:6)

以下是我的建议:在@之前提取部分电子邮件地址,然后在IN之前使用

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

答案 1 :(得分:4)

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

SELECT *
  FROM email 
 WHERE email_address RLIKE 'ajones@|bsmith@|cjohnson@'

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