我目前正在运行这样的查询:
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)
或者这只是一厢情愿的想法?
您也可以使用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
这是我的建议:在之前提取电子邮件地址的一部分@并使用之前IN:
SELECT * FROM `email`
WHERE LEFT(`email_address`, LOCATE('@', `email_address`) - 1)
IN ('ajones', 'bsmith', 'cjohnson')
Run Code Online (Sandbox Code Playgroud)