mysql select query - чтобы сопоставить одно поле с другим полем - PullRequest
1 голос
/ 23 февраля 2011

Я пытаюсь найти записи по следующему сценарию.

ID |     name   |      email
 1      Robert        robert@gmail.com
 2      William       bill@gmail.com
 3      Michael       michael@gmail.com
 4      Micahel       mike@gmail.com

Исходя из приведенной выше таблицы, я хочу найти записи, в которых «имя» содержится в «поле электронной почты», здесь записи 1 и 3 должны быть выходными, а не 2 и 4. Есть ли способ, которым я могу сделать это сравнение?

Я пытался читать о регулярных выражениях, но ничего не смог найти. Если это сравнение того же значения, это будет просто, но я не имею никакого представления об этом. Я думал о LIKE, но похоже, что в нем не может быть имен полей.

Ответы [ 4 ]

2 голосов
/ 23 февраля 2011

Точный синтаксис будет зависеть от того, как вы хотите определить отношения.

Вы ищете имя где-нибудь в адресе электронной почты? (Это будет медленно)

select id,name,email
from your_table
where email like concat('%',name,'%')

Только в начале адреса электронной почты?

select id,name,email
from your_table
where email like concat(name,'%')

Прямо перед знаком @?

select id,name,email
from your_table
where email like concat(name,'@%')
2 голосов
/ 23 февраля 2011

Вы можете использовать LIKE, вы просто должны использовать его в сочетании с CONCAT.

SELECT
    ID,
    name,
    email
FROM
    yourTable
WHERE
    email LIKE CONCAT(name, '%');

CONCAT вернет строку, которую можно использовать для сопоставления с email через LIKE.

1 голос
/ 23 февраля 2011
select * from your_table where lower(substring_index(email,'@',1))=lower(name)
1 голос
/ 23 февраля 2011

Это должно работать

SELECT * FROM table WHERE email LIKE (CONCAT('%',name,'%'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...