Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
mssql запрос, из таблицы выбрать уникальный e-mail адреса
 
ситуация такая в базе даных MSSQL есть таблица с полями name, e-mail, date

например
name                        e-mail            date
Вася Пупкин                 vasia@mail.ru     15-12-2010
вася пупкин.                vasia@mail.ru     15-12-2010
МиШа Васин                  misha@meil.bi     12-13-2010
МИША ВАСИН Петрович         misha@meil.bi     12-13-2010

нужно из таблицы выбрать все уникальные (не повторяющиеся) e-mail адреса
distinct не помогает так как пользователь мог ввести имя например так Вася или так ВаСя
тоисть у меня получаются в результате теже 4 строки, а долно быть 2

мне нужно получить в итоге e-mail, а имя любое на выбор тоисть либо Вася либо ВаСЯ

помогите разобратся
 
Код
[QUOTE]шкраби-коко пишет:

нужно из таблицы выбрать все уникальные (не повторяющиеся) e-mail адреса
distinct не помогает так как пользователь мог ввести имя например так Вася или так ВаСя
тоисть у меня получаются в результате теже 4 строки, а долно быть 2

[/QUOTE]


С мускулом не работал, однако попробуйте сказать ему, что бы он игнорировал регистр. Думаю, что дистинкт поможет.

Однако у Вас есть в примере такие записи

Код
МиШа Васин misha@meil.bi 12-13-2010 
МИША ВАСИН Петрович misha@meil.bi 12-13-2010


так в любом случае это будут уникальные записи Вы сравниваете
МиШа Васин и
МИША ВАСИН Петрович

Вася Пупкин
вася пупкин. - тут точка.


Можно привести строки к нижнему или верхнему регистру,
Код
select distinct lower(name) from email
но все равно критерий поиска какой то неоднозначный. Не понятна задача которую Вы решаете.

Или так

Код
1 - select distinct rpad(lower(name),4) from email
2 - select distinct substr(lower(name),1,3) from email


тут Вы оставляете 4-е символа и по ним делаете выборку (1) или выделяете подстроку (2) из 3-х символов, но опять же критерий для выборки не однозначный. Может как раз среди этих 4-х символов и будет разночтение.

Ну как то так.. если же в качестве критерия для выборки брать поле email, то вообще ни каких проблем, может Вы задачу не четко сформулировали?
Изменено: ivamat - 15.12.2010 23:19:52
 
Цитата
если же в качестве критерия для выборки брать поле email, то вообще ни каких проблем, может Вы задачу не четко сформулировали?

так в том то и дело что запрос вида
select distinct email, name from users

дает мне
МиШа Васин misha@meil.bi
и
МИША ВАСИН Петрович misha@meil.bi

а нужна то одна запись, e-mail один и тот же просто человек по разному свое имя ввел
вот как избавится от этих лишних записей
 
а что GROUP BY уже отменили?
 
а что думаете GROUP BY уже не пробовали?
 
Цитата
шкраби-коко пишет:
а что думаете GROUP BY уже не пробовали?
Код
select email, name from users GROUP BY email

видать плохо пробовали, группировка решает вашу проблему, а чтобы таких казусов не было, есть UNIQUE
Изменено: .::Disel::. - 16.12.2010 00:32:15
 
Цитата
а чтобы таких казусов не было, есть UNIQUE

unique в MSSQL?
не в курсе что есть такая функция
Изменено: шкраби-коко - 16.12.2010 01:00:10
 
Цитата
select email, name from users GROUP BY email

во первых так не пройдет как вы написали, только вот так
select email, name from users GROUP BY email, name


а это тоже самое что и

select distinct email, name from users
 
Цитата
шкраби-коко пишет:
unique в MSSQL?
не в курсе что есть такая функция
читаем про индексы и параметры
Цитата
шкраби-коко пишет:
во первых так не пройдет как вы написали, только вот так
select email, name from users GROUP BY email, name
интересно, Вы сами то поняли что написали, зачем еще и по полю name группировку делать  :o  , оно что у Вас уникальное?
Цитата
шкраби-коко пишет:
мне нужно получить в итоге e-mail, а имя любое на выбор тоисть либо Вася либо ВаСЯ
из вашей формулировки следует, что поле email является уникальным, следовательно группировка проводится по этому полю...
предположу, что ваше поле не уникальное или содержит пустые символы, используйте group by trim(email)
p.s. формулируйте задачу правильно, походу вы сами не понимайте, чего хотите добиться
 
Цитата
Вы сами то поняли что написали, зачем еще и по полю name группировку делать

я то понял, а вы то поняли что по одному полю email сам MSSQL не дает группировку сделать
как оно может сгрупировать если одному еmail соответсвуют разные name(имеется ввиду Петя или ПЕТЯ) :o

Цитата
формулируйте задачу правильно, походу вы сами не понимайте, чего хотите добиться

задача сформулирована правильнее некуда,
просто нужно читать не между строк, а весь текст

сам так любил говорить раньше "Та вы не знаете чего вы сами хотите"
но если прочитать один-два раза то, что написал человек то становится понятно чего он хотел
Изменено: шкраби-коко - 16.12.2010 02:01:33
 
Код
все уникальные (не повторяющиеся) e-mail адреса


Прошу прощения, но я наверно что то не понимаю.  :( Если Вам надо выбрать все уникальные (не повторяющиеся) e-mail адреса, то Ваш запрос будет выглядеть так

Код
select distinct email from table


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

Код
select email,count(name) from table group by email

Тут Вы увидите кол-во имен связаных с уникальным email-ом
Изменено: ivamat - 16.12.2010 11:22:30
 
в самом первом сообщении я написал

Цитата
мне нужно получить в итоге e-mail, а имя любое

попробую обяснить так чтоб стало понятно всем без исключений

результатом запроса должны быть записи из таблицы состоящие из двух полей email и name

как я уже говорил и email и name у меня повторяються, email у одного человека один и тот же, а вот имя они пишут по разному
 
решение нашлось и очень простое

SELECT     MIN(name) AS Expr1, email
FROM         users
GROUP BY email
ORDER BY email

вот что мне нужно было

все ребята, всем спасибо!
 
Цитата

SELECT     MIN(name) AS Expr1, email

Ну AS тут явно лишнее, ибо дальше не используется. Разве что для удобства работы и вывода. :)
 
Цитата
SOLDIER пишет:
Цитата

SELECT     MIN(name) AS Expr1, email

Ну AS тут явно лишнее, ибо дальше не используется. Разве что для удобства работы и вывода.  

а это у меня сам Microsoft SQL Manager подставляет, я и не стал убирать его
Страницы: 1
Читают тему