【问题标题】:mysql select query - to match one field with the other fieldmysql select query - 将一个字段与另一字段匹配
【发布时间】:2011-02-24 00:26:22
【问题描述】:

我正在尝试查找具有以下情况的记录。

ID |     name   |      email
 1      Robert        robert@gmail.com
 2      William       bill@gmail.com
 3      Michael       michael@gmail.com
 4      Micahel       mike@gmail.com

根据上表,我想找到“email字段”中包含“name”的记录,这里记录1和3应该是输出,而不是2和4。有什么办法可以吗做这个比较?

我尝试阅读有关正则表达式的信息,但找不到任何内容。如果是相同值的比较,那将是直截了当的,但我对此一无所知。我想到了LIKE,但看起来这不能有字段名。

【问题讨论】:

  • @bobby - 是的,我已经这样做了。
  • 好。不需要unnecessary politeness。也不需要Thank you cmets,因为它们被认为是不必要的噪音。点赞就够了。

标签: mysql sql


【解决方案1】:

确切的语法将取决于您要如何定义关系。

您是否在电子邮件地址中的任何位置查找姓名? (这会很慢)

select id,name,email
from your_table
where email like concat('%',name,'%')

就在电子邮件地址的开头?

select id,name,email
from your_table
where email like concat(name,'%')

就在@符号之前?

select id,name,email
from your_table
where email like concat(name,'@%')

【讨论】:

  • 非常感谢,这是一个快速的回复,它有帮助。 @all 谢谢大家!
【解决方案2】:

你可以使用LIKE,你只需要将它与CONCAT结合使用。

SELECT
    ID,
    name,
    email
FROM
    yourTable
WHERE
    email LIKE CONCAT(name, '%');

CONCAT 将返回一个字符串,该字符串可用于通过LIKE 匹配email

【讨论】:

    【解决方案3】:

    这应该可以工作

    SELECT * FROM table WHERE email LIKE (CONCAT('%',name,'%'))
    

    【讨论】:

    • 也许使用 ILIKE 会做得更好,因为它不区分大小写
    • @Voooza: 从什么时候开始LIKE 区分大小写?
    • 我只是在编辑我的评论。抱歉,我完全忘记了 mysql 是不敏感的 :-)
    【解决方案4】:
    select * from your_table where lower(substring_index(email,'@',1))=lower(name)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-28
      • 2017-10-28
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      相关资源
      最近更新 更多