Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 вперед Ctrl→ все |
Knyazev Alexey Member Откуда: Екб -> Мск Сообщений: 10234 Блог |
ух...думал форумом ошибся ![]() |
||
23 апр 13, 12:42 [14217817] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Не путать соленое и красное. А пойти поизучать теорию работы с множествами. А не придумывать ее самому. |
||
23 апр 13, 13:17 [14218153] Ответить | Цитировать Сообщить модератору |
BlackRaider Member Откуда: Москва (Волгоград) Сообщений: 63 |
в корне не верно, нет 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] Ответить | Цитировать Сообщить модератору |
Паганель Member Откуда: Винница Сообщений: 22551 |
|
||
23 апр 13, 13:26 [14218269] Ответить | Цитировать Сообщить модератору |
BlackRaider Member Откуда: Москва (Волгоград) Сообщений: 63 |
ясный перец что разные, запросы то разные. 2-ой похоже вообще ничего не вернет. (или я ошибаюсь!?) |
||
23 апр 13, 13:31 [14218321] Ответить | Цитировать Сообщить модератору |
Shakill Member Откуда: мск Сообщений: 1882 |
вы до сих пор не обозначили нужный вам результат. напишите пример исходных данных, результат для них и комментарий, почему именно так должно получиться |
||
23 апр 13, 13:36 [14218356] Ответить | Цитировать Сообщить модератору |
Amateur7 Member Откуда: Сообщений: 266 |
BlackRaider, реально ошибаешься, проблема том, что при проверке NOT IN вернутся уникальные f.name, что приедет к потере данных при выборке, т.к. в таблице несколько строк с одинаковыми f.name придется посидеть подумать... |
23 апр 13, 13:38 [14218372] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
Автор топика, у вас системная ошибка. Вы мнесто того, чтобы понять ЧТО вам нужно, сразу решили КАК вы это будете делать. И эту парадигму пытаетесь навязать нам. Вам надо сначала упорядочить в голове: - что вы имеете - что именно вы хотите буквально То есть надо четко осозновать КАЖДОЕ слово в вашем хочу. После этого прочитать основы составления запросов, и попробовать решить свою простую задачу. |
23 апр 13, 13:39 [14218378] Ответить | Цитировать Сообщить модератору |
Amateur7 Member Откуда: Сообщений: 266 |
Shakill, вопрос - как исключить потерю строк с одинаковыми f.name при постраничной выборке. |
23 апр 13, 13:40 [14218390] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
Что такое ПОСТРАНИЧНАЯ ВЫБОРКА? |
23 апр 13, 13:45 [14218414] Ответить | Цитировать Сообщить модератору |
BlackRaider Member Откуда: Москва (Волгоград) Сообщений: 63 |
Amateur7,
|
||
23 апр 13, 13:46 [14218424] Ответить | Цитировать Сообщить модератору |
BlackRaider Member Откуда: Москва (Волгоград) Сообщений: 63 |
|
||
23 апр 13, 13:48 [14218433] Ответить | Цитировать Сообщить модератору |
Владимир СА Member Откуда: Сообщений: 7882 |
Amateur7 ! Вообще желательно сначала прочитать Рекомендации по оформлению сообщений в форуме... Особенно пункт 6. |
23 апр 13, 13:48 [14218436] Ответить | Цитировать Сообщить модератору |
Shakill Member Откуда: мск Сообщений: 1882 |
внезапно! еще раз: покажите желаемый результат на примере данных. с комментариями. |
||
23 апр 13, 13:50 [14218447] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
Есть предполажение, что автор сам не понимает какая у него структура данных, и что ему нужно. Это основная проблема,а не то, как работает "дистинкт" и "(нот) ин" |
23 апр 13, 13:52 [14218455] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
* предположение |
23 апр 13, 13:55 [14218474] Ответить | Цитировать Сообщить модератору |
BlackRaider Member Откуда: Москва (Волгоград) Сообщений: 63 |
из 1 поста
Что то я вообще уже не вкурю что надо автору |
||||
23 апр 13, 14:34 [14218757] Ответить | Цитировать Сообщить модератору |
Amateur7 Member Откуда: Сообщений: 266 |
вы не правы, я не стал бы спрашивать если бы сам не знал, что нужно. |
||
23 апр 13, 18:46 [14220791] Ответить | Цитировать Сообщить модератору |
Паганель Member Откуда: Винница Сообщений: 22551 |
я так понял примеров данных мы не дождемся ![]() |
23 апр 13, 18:49 [14220801] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А зачем справшивать, если вы знаете, что вам нужно ? |
||
23 апр 13, 18:51 [14220808] Ответить | Цитировать Сообщить модератору |
BlackRaider Member Откуда: Москва (Волгоград) Сообщений: 63 |
нас более внятно просветите? |
||
23 апр 13, 18:53 [14220819] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Если сто раз повторить "халва", то во рту слаще не станет.
Не надо постить сто раз запрос, который выдает ненужный вам результат Выполните пунтк 4 и 6, о чем вас просят уже давно. |
||||
23 апр 13, 19:02 [14220855] Ответить | Цитировать Сообщить модератору |
BlackRaider Member Откуда: Москва (Волгоград) Сообщений: 63 |
так вам надо просто выборку по 20 строк сделать чтоль? те. с 1 по 20 дальше с 21 по 40 и т.д.? правильно понял? |
23 апр 13, 19:04 [14220859] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |