【问题标题】:Is there a way to combine IN and LIKE in MySQL?有没有办法在 MySQL 中结合 IN 和 LIKE?
【发布时间】:2011-02-23 09:55:23
【问题描述】:

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

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@%')

或者这只是一厢情愿?

【问题讨论】:

标签: mysql sql-like


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您也可以使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      相关资源
      最近更新 更多