2011-02-23 94 views
1

我正在尝试查找具有以下情形的记录。mysql选择查询 - 将一个字段与其他字段匹配

ID |  name |  email 
1  Robert  [email protected] 
2  William  [email protected] 
3  Michael  [email protected] 
4  Micahel  [email protected] 

基于上面的表,我想找到这里的“名”包含在“电子邮件字段”的记载,这里记录1和3应该是输出,而不是2和4。有任何方式我可以做这个比较?

我尝试阅读正则表达式,但找不到任何东西。如果它是相同价值的比较,那将是直截了当的,但我对此没有任何线索。我想到LIKE,但看起来像这个不能有字段名称。

+0

@bobby - 是啊,我这样做了。 – Jay 2011-02-23 16:49:01

+0

好。没有必要[不必要的礼貌](http://meta.stackexchange.com/questions/2950/should-hi-thanks-and-taglines-and-salutations-be-removed-from-posts)。也不需要“谢谢”​​评论,因为它们被认为是不必要的噪音。 upvote就足够了。 – Bobby 2011-02-23 16:53:43

回答

2

确切语法取决于你想如何定义的关系。

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

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

非常感谢,这是一个快速回复,它有帮助。 @谢谢大家! – Jay 2011-02-23 16:28:16

2

您可以使用LIKE,您只需将它与CONCAT结合使用即可。

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

CONCAT将返回其可用于经由LIKE来匹配email的字符串。

+0

感谢您的帮助。 – Jay 2011-02-23 16:31:12

1

这应该工作

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

也许使用ILIKE会做得更好,因为它不区分大小写 – Voooza 2011-02-23 16:24:37

+0

@Voooza:从什么时候起'LIKE'区分大小写? – Bobby 2011-02-23 16:25:50

+0

我刚刚编辑我的评论。对不起,我忘记了mysql是不敏感的:-) – Voooza 2011-02-23 16:28:55

1
select * from your_table where lower(substring_index(email,'@',1))=lower(name) 
相关问题