我目前正在运行这样的查询:
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@%')
或者这只是一厢情愿的想法?
答案 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