【问题标题】:SQL: comparing string against column and column against column based on results of first compareSQL:根据第一次比较的结果比较字符串与列和列与列
【发布时间】:2014-09-11 21:53:39
【问题描述】:

我有这些栏目:

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

【问题讨论】:

  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • 既然工作邮件应该包含姓氏,那它不应该看看那个不包含姓氏的邮件,而不是个人邮件吗?

标签: sql string oracle compare


【解决方案1】:

你需要加入emailarea表两次,一次是个人邮箱,一次是工作邮箱,所以你可以同时返回。

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 || '%'

【讨论】:

  • 我在甲骨文。有时一个人可能认为他们将工作电子邮件地址放在个人电子邮件地址字段中,但他们错了。我试图找出人们何时输入错误的公司电子邮件地址作为他们的个人。我希望这是有道理的!
  • 这不是倒退吗?他们的工作电子邮件应该在 WORK 字段中,而不是 PERS 字段中,不是吗?
  • 可以,但他们仍然可以将工作电子邮件用作个人电子邮件。对不起,这令人困惑。 :( 我想将 PERS 与 WORK 进行比较会更容易如果 PERS 在地址中包含“my.company.com”。在这种情况下,地址是否包含 Last_Name 无关紧要!所以:选择 ----where emailtype=PERS and like 'my.company' 然后将包含 'my.company' 的 PERS 电子邮件与 WORK 电子邮件进行比较,找出不匹配的那些。 ::scratches head::
  • 如果您想比较工作和个人电子邮件,您可以使用我的答案中的方法。只需添加类似AND emp.email = emw.email 的内容来测试它们是否相同。无论您想要什么,个人和工作电子邮件都可以在这两列中找到。
  • 基本上,从我查询的前 5 行开始。然后在任一或两个电子邮件列上添加您想要的任何其他条件。
猜你喜欢
  • 2021-07-14
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多