2014-09-11 4 views
0

У меня есть эти столбцы:SQL: сравнение строки с колонки и колонки с колонки на основе результатов первых сравнить

типы
ID, Last_Name, First, Email, Email type 

электронной почты являются PERS и РАБОТА Человек может иметь как PERS и РАБОТУ адрес электронной почты. Рабочий адрес содержит Last_Name в адресе электронной почты.

Пример:

14569, Smith, Joe, [email protected], PERS 
14569, Smith, Joe, [email protected], WORK 
59876, Conway, Mary, [email protected], PERS 
59876, Conway, Mary, [email protected], WORK 
79654, Far, John, [email protected], PERS 
79654, Far, John, [email protected], WORK 

Вот что я пытаюсь сделать: Я ищу людей, которые имеют свою работу электронной почты, перечисленные в их личной электронной почты поле.
Поле электронной почты может содержать как рабочие, так и личные адреса электронной почты. Если тип электронной почты = PERS и содержит «my.company.com», я хочу посмотреть на адрес электронной почты PERS, чтобы узнать, не содержит ли оно Last_Name.

Результатов должны быть как некорректные Pers электронной почты и правильная работа по электронной почте:

79654, Far, John, [email protected], PERS 
79654, Far, John, [email protected], 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, он не покажет мне никаких адресов электронной почты WORK. Мне тоже нужна помощь в этой проблеме. Результаты:

14569, Smith, Joe, [email protected], PERS 
59876, Conway, Mary, [email protected], PERS 
79654, Far, John, [email protected], PERS 
+0

Какая СУБД вы используете? Postgres? Oracle? –

+0

Так как рабочая электронная почта должна содержать фамилию, разве она не должна смотреть на нее, чтобы увидеть, не содержит ли она фамилию, а не личную электронную почту? – Barmar

ответ

0

Вы должны присоединиться к 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 || '%' 
+0

Я в Oracle. Иногда человек может подумать, что они помещают свой рабочий адрес электронной почты в свое личное поле адреса электронной почты, но они ошибаются. Я пытаюсь найти, когда люди вводят неправильный адрес электронной почты компании в качестве своего личного. Надеюсь это имеет смысл! –

+0

Разве это не так? Их рабочий адрес должен быть в поле WORK, а не в поле PERS, не так ли? – Barmar

+0

Я обновил ответ, чтобы использовать синтаксис конкатенации Oracle – Barmar

Смежные вопросы