2013-05-01 27 views
0

当员工姓名包含在电子邮件中时,我想显示与其关联的姓名和电子邮件。用户可以有多个电子邮件。检查员工电子邮件是否包含他的姓名 - 不区分大小写

employee 
id name 
1 Steve Been 
2 Rob Kem 
3 Bob Kimi 

Emails 
emplyee_id email 
1   [email protected] 
1   [email protected] 
1   [email protected] 
2   [email protected] 
2   [email protected] 
3   [email protected] 
3   [email protected] 

查询不应该是区分大小写。我想这个查询,以显示我是这样的:

name   email 
Steve Been  [email protected] 
Steve Been  [email protected] 
Rob Kem   [email protected] 
Rob Kem   [email protected]  
Bob Kimi  [email protected] 

我试过,但我得到空的输出:

select empl.Name as 'employee Name', em.email as 'Product Name' 

from email em JOIN employee empl 
ON em.employee_id = empl.ID 

WHERE FIND_IN_SET(LOWER(empl.Name),LOWER(em.Name)) 
+0

首先,你需要打出来的代币(第一和最后一个名称的查询,以及作为@之前的项目和'。'之间的项目),那么你需要比较每一个。 – Randy 2013-05-01 20:22:26

回答

2

尝试

SELECT e.name, 
     m.email 
    FROM emails m JOIN 
     employee e ON m.emplyee_id = e.id 
WHERE INSTR(m.email, SUBSTRING_INDEX(e.name, ' ', 1)) > 0 
    OR INSTR(m.email, SUBSTRING_INDEX(e.name, ' ', -1)) > 0 

SQLFiddle

INSTR()不区分大小写,除非其中一个刺激是二进制字符串,但您始终可以添加LOWER()作为一个很好的措施。

UPDATE:根据您的额外要求,您可以做到这一点像这样

SELECT name, 
     total, 
     matched, 
     total - matched unmatched 
    FROM (
SELECT e.name, 
     COUNT(*) total, 
     SUM(CASE WHEN INSTR(m.email, SUBSTRING_INDEX(e.name, ' ', 1)) > 0 
        OR INSTR(m.email, SUBSTRING_INDEX(e.name, ' ', -1)) THEN 1 ELSE 0 END) matched 
    FROM emails m JOIN 
     employee e ON m.emplyee_id = e.id 
GROUP BY e.id, e.name) q 

SQLFiddle

+0

像pro一样工作!非常感谢Peterm!演示是一个很棒的举动!再次非常感谢你! – mongotop 2013-05-01 20:35:33

+1

你当然欢迎,我很高兴它有帮助。 – peterm 2013-05-01 20:38:25

+0

您好Peterm,我想问你一个忙,我可以得到雇员的名字和有多少电子邮件匹配和有多少不是?先谢谢你! – mongotop 2013-05-01 20:52:13

相关问题