2011-02-23 92 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) 
相關問題