SQL:根据第一次比较的结果,将字符串与列和列进行比较

时间:2014-09-11 21:53:40

标签: sql string oracle compare

我有这些专栏:

ID, Last_Name, First, Email, Email type

电子邮件类型是PERS和WORK 一个人可以同时拥有PERS和WORK电子邮件地址。 工作地址包含电子邮件地址中的Last_Name。

示例:

14569, Smith, Joe, money133@aol.com, PERS
14569, Smith, Joe, JSmith142@company.com, WORK
59876, Conway, Mary, MConway131@company.com, PERS
59876, Conway, Mary, MConway131@company.com, WORK
79654, Far, John, JohnFar@company.com, PERS
79654, Far, John, JFar241@company.com, WORK

以下是我要做的事情: 我正在寻找在个人电子邮件领域列出工作电子邮件的人 电子邮件字段可能包含工作或个人电子邮件地址。 如果电子邮件类型= PERS并且它包含' my.company.com',我想查看PERS电子邮件地址,看它是否包含Last_Name。

结果应该是错误的电子邮件和正确的工作电子邮件:

79654, Far, John, JohnFar@company.com, PERS
79654, Far, John, JFar241@company.com, WORK

SELECT 
ID, pp.Last_Name, pp.First, em.Email, em.Email_type
from Somewhere pp
join emailarea em
on id.somewhere_ID = em.email_ID
where
(em.email_type = 'PERS' or em.email_type = 'WORK')
and
(em.email_type = 'PERS' and em.email like '%my.company.com')
and 
em.email not like Last_Name

如何将em.email与Last_Name进行比较? 此外,因为我说它必须是PERS,它不会显示任何工作电子邮件地址。我也需要帮助解决这个问题。 结果是:

14569, Smith, Joe, money133@aol.com, PERS
59876, Conway, Mary, MConway131@company.com, PERS
79654, Far, John, JohnFar@company.com, PERS

1 个答案:

答案 0 :(得分:0)

您需要两次加入emailarea表,一次是个人电子邮件,然后是工作电子邮件,这样您就可以同时退回。{/ p>

SELECT somewhere_ID, pp.Last_Name, pp.First, emw.email AS Work_Email, emp.email AS Pers_Email
FROM somewhere pp
JOIN emailarea emp ON emp.email_ID = pp.somewhere_ID
JOIN emailarea emw ON emw.email_ID = pp.somewhere_ID
WHERE emp.type = "PERS"
AND emw.type = "WORK"
AND emp.email LIKE '%my.company.com'
AND emp.email NOT LIKE '%' || pp.Last_Name || '%'