Ищет запрос, который соответствует точному имени в почтовый адрес. Определение точного соответствия - это когда имя является частью адреса электронной почты:
Чтобы уточнить, я подготовил некоторые примеры данных:
имена таблиц
luis
mary
anne
andrew
почтовые рассылки
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
запрос должен вернуться:
luis [email protected]
anne [email protected]
mary [email protected]
andrew [email protected]
к сожалению, операнд SELECT
с LIKE
возвращает много ложных срабатываний:
select name,address
from emails
join names on address like concat('%',name,'%');
Я подготовил тестовую среду на скрипте SQL
Кажется, вам нужно совпадение в части письма до @
(по крайней мере). Вы можете обрабатывать это с помощью substring_index()
или регулярного выражения:
select n.name, e.address
from emails e join
names n
on substring_index(e.address, '@', 1 ) like concat('%', name, '%');
Если вы пытаетесь найти точное имя, поэтому "anne" не соответствует "jeanne", а затем учитывайте следующие периоды:
select n.name, e.address
from emails e join
names n
on concat('.', substring_index(e.address, '@', 1 ), '.') like concat('%.', name, '.%');
Это не захватывает Anne, что вы можете делать с регулярными выражениями:
select n.name, e.address, concat('[^a-zA-Z]', name, '[^a-zA-Z].*@')
from emails e join
names n
on concat('.', e.address) regexp concat('[^a-zA-Z]', name, '[^a-zA-Z]?.*@')
Для полноты, начиная с @GordonLinoff, я приземлился на этот запрос, может быть передовым, но охватывать все случаи
select name,address
from emails e
join names on
lower(e.address) regexp concat('^(',name,'|[^a-z]*',name,'[^a-z]*' ,'|[^@]+[^a-z]+' ,name, '[^a-z@]*' ,'|[^@a-z]*' ,name, '[^a-z]+[^@]+' ,')@')
Вы можете сопоставить имя и подстроку адреса до @
таблицы электронной почты
select name,address
from emails
join names
on SubString(address,1,POSITION('@' IN address)) like concat('%',name,'%');
Вы можете использовать substring_index
для этого, когда используете его, мы делаем последний параметр равным 1, поэтому он будет получать подстроку слева направо
select name,address
from emails
join names on SUBSTRING_INDEX(address,'@',1) like concat('%',name,'%');
sqlfiddle находится на здесь