Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Проблема с выборкой уникальных значений  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
iap
Что-то уже и воды отошли,
а всё никак не родится! :((


ух...думал форумом ошибся
23 апр 13, 12:42    [14217817]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Amateur7
Member

Откуда:
Сообщений: 266
хорошо, допустим возьмем проверку всей строки на уникальность:

SELECT 
DISTINCT 
f.id_service as f_id_service,
 f.id_city as f_id_city, 
f.name as f_name, 
f.address as f_address, 
f.business as f_business, 
f.web as f_web, 
f.phone as f_phone, 
f.id_firm as f_id_firm, 
p.name as p_name 
FROM Firm f left join Price p on p.id_service=f.id_service AND p.id_city=f.id_city AND p.id_firm=f.id_firm


тогда как быть в таком случае?

SELECT 
DISTINCT TOP 20 
f.id_service as f_id_service,
 f.id_city as f_id_city, 
f.name as f_name, 
f.address as f_address, 
f.business as f_business, 
f.web as f_web, 
f.phone as f_phone, 
f.id_firm as f_id_firm, 
p.name as p_name 
FROM Firm f left join Price p on p.id_service=f.id_service AND p.id_city=f.id_city AND p.id_firm=f.id_firm 

WHERE 

f.name 
NOT IN (
SELECT DISTINCT TOP 20 
f.name FROM Firm f 
left join Price p on p.id_service=f.id_service AND p.id_city=f.id_city AND p.id_firm=f.id_firm 
WHERE p.id_city='73041' AND p.include='1' AND p.blocked='0' AND f.blocked='0' AND p.id_group='44' AND p.id_subgroup='266' 
ORDER BY f.name ASC
) 
AND p.id_firm=f.id_firm AND p.id_city='73041' AND p.include='1' AND p.blocked='0' 
AND f.blocked='0' AND p.id_group='44' AND p.id_subgroup='266'
ORDER BY f.name ASC


ведь одинаковые наименования f_name будут учитываться как одно значение и результаты по первому и второму запросу будут разными...
как быть в таком случае?
23 апр 13, 13:14    [14218119]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Glory
Member

Откуда:
Сообщений: 104751
Amateur7
как быть в таком случае?

Не путать соленое и красное.
А пойти поизучать теорию работы с множествами.
А не придумывать ее самому.
23 апр 13, 13:17    [14218153]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
BlackRaider
Member

Откуда: Москва (Волгоград)
Сообщений: 63
Amateur7
SELECT DISTINCT f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone,
p.name as p_name
FROM Firm f
left join Price p on p.id_service=f.id_service AND p.id_city=f.id_city AND p.id_firm=f.id_firm
WHERE p.include='1' ORDER BY f.name ASC

[/src]

Подскажите почему они отображаются результатах, тогда как есть SELECT DISTINCT f.name as f_name

в корне не верно, нет SELECT DISTINCT f.name as f_name а есть:
DISTINCT f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone,
p.name as p_name

Т.е. DISTINCT применяется ко всем полям select'a а не к полю которое идет после DISTINCT, так понятнее?
23 апр 13, 13:25    [14218252]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
Amateur7
как быть в таком случае?
выполнить, наконец-то рекомендации
23 апр 13, 13:26    [14218269]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
BlackRaider
Member

Откуда: Москва (Волгоград)
Сообщений: 63
Amateur7

ведь одинаковые наименования f_name будут учитываться как одно значение и результаты по первому и второму запросу будут разными...
как быть в таком случае?

ясный перец что разные, запросы то разные.

2-ой похоже вообще ничего не вернет. (или я ошибаюсь!?)
23 апр 13, 13:31    [14218321]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Amateur7
ведь одинаковые наименования f_name будут учитываться как одно значение и результаты по первому и второму запросу будут разными...
как быть в таком случае?


вы до сих пор не обозначили нужный вам результат.
напишите пример исходных данных, результат для них и комментарий, почему именно так должно получиться
23 апр 13, 13:36    [14218356]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Amateur7
Member

Откуда:
Сообщений: 266
BlackRaider,

реально ошибаешься, проблема том, что при проверке NOT IN вернутся уникальные f.name, что приедет к потере данных при выборке, т.к. в таблице несколько строк с одинаковыми f.name

придется посидеть подумать...
23 апр 13, 13:38    [14218372]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Автор топика, у вас системная ошибка. Вы мнесто того, чтобы понять ЧТО вам нужно, сразу решили КАК вы это будете делать. И эту парадигму пытаетесь навязать нам.

Вам надо сначала упорядочить в голове:
- что вы имеете
- что именно вы хотите буквально

То есть надо четко осозновать КАЖДОЕ слово в вашем хочу.

После этого прочитать основы составления запросов, и попробовать решить свою простую задачу.
23 апр 13, 13:39    [14218378]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Shakill,

вопрос - как исключить потерю строк с одинаковыми f.name при постраничной выборке.
23 апр 13, 13:40    [14218390]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Что такое ПОСТРАНИЧНАЯ ВЫБОРКА?
23 апр 13, 13:45    [14218414]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
BlackRaider
Member

Откуда: Москва (Волгоград)
Сообщений: 63
Amateur7,
автор
проблема том, что при проверке NOT IN вернутся уникальные f.name, что приедет к потере данных при выборке, т.к. в таблице несколько строк с одинаковыми f.name
переведи!
23 апр 13, 13:46    [14218424]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
BlackRaider
Member

Откуда: Москва (Волгоград)
Сообщений: 63
автор
при постраничной выборке.
и это тоже переведи.
23 апр 13, 13:48    [14218433]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
Amateur7 !
Вообще желательно сначала прочитать Рекомендации по оформлению сообщений в форуме... Особенно пункт 6.
23 апр 13, 13:48    [14218436]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Amateur7
Shakill,

вопрос - как исключить потерю строк с одинаковыми f.name при постраничной выборке.

внезапно!
еще раз: покажите желаемый результат на примере данных. с комментариями.
23 апр 13, 13:50    [14218447]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Есть предполажение, что автор сам не понимает какая у него структура данных, и что ему нужно. Это основная проблема,а не то, как работает "дистинкт" и "(нот) ин"
23 апр 13, 13:52    [14218455]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
* предположение
23 апр 13, 13:55    [14218474]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
BlackRaider
Member

Откуда: Москва (Волгоград)
Сообщений: 63
Amateur7
Shakill,

вопрос - как исключить потерю строк с одинаковыми f.name.


из 1 поста
автор
чтобы выводились только уникальные значения f_name


Что то я вообще уже не вкурю что надо автору
23 апр 13, 14:34    [14218757]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Cammomile
Есть предполажение, что автор сам не понимает какая у него структура данных, и что ему нужно. Это основная проблема,а не то, как работает "дистинкт" и "(нот) ин"


вы не правы, я не стал бы спрашивать если бы сам не знал, что нужно.
23 апр 13, 18:46    [14220791]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
я так понял примеров данных мы не дождемся
23 апр 13, 18:49    [14220801]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Glory
Member

Откуда:
Сообщений: 104751
Amateur7
я не стал бы спрашивать если бы сам не знал, что нужно.

А зачем справшивать, если вы знаете, что вам нужно ?
23 апр 13, 18:51    [14220808]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
BlackRaider
Member

Откуда: Москва (Волгоград)
Сообщений: 63
Amateur7

вы не правы, я не стал бы спрашивать если бы сам не знал, что нужно.


нас более внятно просветите?
23 апр 13, 18:53    [14220819]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Amateur7
Member

Откуда:
Сообщений: 266
ОК, поясню подробнее.
Ввиду того, что строки уникальны(если брать се поля, а не только f_name), изменилось условие задачи.


1) запрос:
SELECT 
DISTINCT 
f.id_service as f_id_service,
 f.id_city as f_id_city, 
f.name as f_name, 
f.address as f_address, 
f.business as f_business, 
f.web as f_web, 
f.phone as f_phone, 
f.id_firm as f_id_firm, 
p.name as p_name 
FROM Firm f left join Price p on p.id_service=f.id_service AND p.id_city=f.id_city AND p.id_firm=f.id_firm

выводит таблицу со след данными:

Картинка с другого сайта.

2) для выборки по 20 строк, для получения строк 21-40 используется запрос:

SELECT 
DISTINCT TOP 20 
f.id_service as f_id_service,
 f.id_city as f_id_city, 
f.name as f_name, 
f.address as f_address, 
f.business as f_business, 
f.web as f_web, 
f.phone as f_phone, 
f.id_firm as f_id_firm, 
p.name as p_name 
FROM Firm f left join Price p on p.id_service=f.id_service AND p.id_city=f.id_city AND p.id_firm=f.id_firm 

WHERE 

f.name 
NOT IN (
SELECT DISTINCT TOP 20 
f.name FROM Firm f 
left join Price p on p.id_service=f.id_service AND p.id_city=f.id_city AND p.id_firm=f.id_firm 
WHERE p.id_city='73041' AND p.include='1' AND p.blocked='0' AND f.blocked='0' AND p.id_group='44' AND p.id_subgroup='266' 
ORDER BY f.name ASC
) 
AND p.id_firm=f.id_firm AND p.id_city='73041' AND p.include='1' AND p.blocked='0' 
AND f.blocked='0' AND p.id_group='44' AND p.id_subgroup='266'
ORDER BY f.name ASC


как видно из 2-го запроса, используется проверка на
f.name

Однако, если посмотреть на скриншот, мы видим, что в столбце
f_name
есть несколько одинаковых значений, из чего следует, что из всех строк с одинаковыми значениями
f.name
при втором запросе, а именно в части второго запроса:

WHERE 

f.name 
NOT IN (
SELECT DISTINCT TOP 20 
f.name FROM Firm f 
left join Price p on p.id_service=f.id_service AND p.id_city=f.id_city AND p.id_firm=f.id_firm 
WHERE p.id_city='73041' AND p.include='1' AND p.blocked='0' AND f.blocked='0' AND p.id_group='44' AND p.id_subgroup='266' 
ORDER BY f.name ASC
) 


будут выбираться только уникальные значения f.name, что в конечном результате приведет к потере строк, т.к. в таблице есть строки с одинаковыми f.name, но в целом строка уникальна(при учете всех столбцов).

На этот раз вроде бы все понятно объяснил, если есть какие-либо вопросы, постараюсь ответить.
23 апр 13, 19:00    [14220847]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
Glory
Member

Откуда:
Сообщений: 104751
Amateur7
На этот раз вроде бы все понятно объяснил

Если сто раз повторить "халва", то во рту слаще не станет.

Amateur7
если есть какие-либо вопросы, постараюсь ответить.

Не надо постить сто раз запрос, который выдает ненужный вам результат
Выполните пунтк 4 и 6, о чем вас просят уже давно.
23 апр 13, 19:02    [14220855]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выборкой уникальных значений  [new]
BlackRaider
Member

Откуда: Москва (Волгоград)
Сообщений: 63
так вам надо просто выборку по 20 строк сделать чтоль?
те. с 1 по 20 дальше с 21 по 40 и т.д.?
правильно понял?
23 апр 13, 19:04    [14220859]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить