Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выборка без дублей и тд.  [new]
QVasya
Member

Откуда:
Сообщений: 5
Здравствуйте.
Недавно озадачился следующим вопросом:

Запросы:

select top 1 profile_name from profiles where profile_name not in(select top [b]1[/b] profile_name from profiles)
select top 1 profile_name from profiles where profile_name not in(select top [b]2[/b] profile_name from profiles)
и т. д.


Выводят уникальные данные. Но в некоторых других таблицах, где побольше profile_name Местами начинают выдавать дубли вместо существующих колонок.

С чем это связанно илил как это можно исправить?
1 апр 12, 18:18    [12347561]     Ответить | Цитировать Сообщить модератору
 Re: Выборка без дублей и тд.  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
QVasya,
Проверь, что данные не задваиваются:
select 
profile_name, COUNT(1) cn
from profiles 
group by profile_name 
having COUNT(1)>1


А сами запросы странные, показать любую первую запись где запись не равна другой любой записи. Это что за логика?
1 апр 12, 18:26    [12347573]     Ответить | Цитировать Сообщить модератору
 Re: Выборка без дублей и тд.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Я чего-то не понял. Как select top 1 может вернуть хоть один дубль, если это не более одной записи?

З.Ы. И, да, top без order by - ересь несусветная.
1 апр 12, 18:26    [12347574]     Ответить | Цитировать Сообщить модератору
 Re: Выборка без дублей и тд.  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
QVasya
С чем это связанно илил как это можно исправить?
С тем, что используется top без order by. И, да, select с top 1 не может вернуть более одной записи. Так что поясните насчет дублей.
1 апр 12, 18:29    [12347577]     Ответить | Цитировать Сообщить модератору
 Re: Выборка без дублей и тд.  [new]
QVasya
Member

Откуда:
Сообщений: 5
Дубли возвращает так:

например

идут записи в таблице:

column1
column2
column3
....
column100

Если я циклично вытаскиваю по одной строке, то местами выдает так:

column1
column2
column2
column4
....
column100

Пробовал делать так:
select top 1 profile_name from profiles where profile_name not in(select top 1 profile_name from profiles order by 1) order by 1


Но ситуация не меняется.
1 апр 12, 18:34    [12347594]     Ответить | Цитировать Сообщить модератору
 Re: Выборка без дублей и тд.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
QVasya
Пробовал делать так:
Цикличность-то где?
1 апр 12, 18:36    [12347598]     Ответить | Цитировать Сообщить модератору
 Re: Выборка без дублей и тд.  [new]
QVasya
Member

Откуда:
Сообщений: 5
Цикличность в web-скрипте.
1 апр 12, 18:37    [12347599]     Ответить | Цитировать Сообщить модератору
 Re: Выборка без дублей и тд.  [new]
QVasya
Member

Откуда:
Сообщений: 5
Скрипт просто перебирает записи меняя переменную во втором подзапросе. (not in top 1 ... итд)
1 апр 12, 18:38    [12347601]     Ответить | Цитировать Сообщить модератору
 Re: Выборка без дублей и тд.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
QVasya
Скрипт просто перебирает записи меняя переменную во втором подзапросе. (not in top 1 ... итд)
В ваше запросе нет ни одной переменной.
1 апр 12, 18:55    [12347628]     Ответить | Цитировать Сообщить модератору
 Re: Выборка без дублей и тд.  [new]
QVasya
Member

Откуда:
Сообщений: 5
query = "select top 1 profile_name from profiles where profile_name not in(select top " + peremennaya + " profile_name from profiles order by 1) order by 1"
1 апр 12, 19:03    [12347639]     Ответить | Цитировать Сообщить модератору
 Re: Выборка без дублей и тд.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
QVasya
query = "select top 1 profile_name from profiles where profile_name not in(select top " + peremennaya + " profile_name from profiles order by 1) order by 1"


Расставьте алиасы, для начала.

select top 1 profile_name from profiles where profile_name not in(select top 1 x.profile_name from profiles as x order by 1) order by 1


После проверяйте профайлером, что ваш скрипт отправляет на сервер. В нем тоже могут быть ошибки.

Ну и причина, по которой вы выбираете данные по одной записи, вместо того, чтоб выбрать нужные все сразу - не понятна.
1 апр 12, 19:10    [12347652]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить