powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Пометить дубликаты : как победить коррелированные запросы?
74 сообщений из 74, показаны все 3 страниц
Пометить дубликаты : как победить коррелированные запросы?
    #32532276
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я со своими Update-ами уже весь форум замучил.
Желаю разобраться с коррелированными запросами раз и навсегда. Не далее как вчера была похожая тема Саныча. Но чего-то я в этом вопросе недопонимаю, и каждый раз когда я с этим сталкиваюсь, я убеждаюсь, что я ничего не понимаю. Посему вопрос к тем, кто в этом разбирается - как надо рассуждать при написании коррелированного запроса. И пример задачи, которую я не могу решить (:-()
В таблицу test
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
id	FK	duplicate
 1 	 1 	Нет
 2 	 1 	Да
 3 	 2 	Нет
 4 	 2 	Да
 5 	 1 	Да
 6 	 1 	Нет
 7 	 5 	Нет
 8 	 1 	Нет
 9 	 5 	Нет
 10 	 2 	Нет
начиная с какой-то известной строки вставляются данные ( в данном примере с 6). После вставки надо проставить в поле duplicate флаг в те строки, которые уже проходили ранее по данному FK, т.е в данном примере флаг должен проставиться в соотв. поле строк с id=6,8,9,10
Если кто-то решит эту задачку, большая просьба разъяснить, как этот запрос работает, чтоб разобраться с этим раз и навсегда.
Может еще и ссылку кто даст, где про такие запросы можно почитать.
Спасибо.
Отключаюсь на 2 часа.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532287
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот условия не очень понял...
авторПосле вставки надо проставить в поле duplicate флаг в те строки, которые уже проходили ранее по данному FK
Объясни по человечески - это значит, что надо Update-нуть только те строки у которых FK такой-же как и у 6-й строки?
тогда почему такой список... id=6,8,9,10

не догоняю...
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532291
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО

Имеется ввиду следующие

Если есть в таблице записи с id меньшим текущей и с равным FK, то ставм "ДА", иначе "НЕТ"

Так понятно?
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532304
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
Update test t1 left join test t2 on (t1.id > t2.id) and (t1.fk = t2.fk)
set t1.b = true
where t2.id is not null;

проверил - работает :)
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532672
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bely.
paparome очень точно выразил мысль : "Если есть в таблице записи с id меньшим текущей и с равным FK, то ставм "ДА", иначе "НЕТ"
Paramone , красота, действительно этот запрос
Код: plaintext
1.
2.
Update test t1 left join test t2 on (t1.id > t2.id) and (t1.fk = t2.fk)
set t1.duplicate = true
where t2.id is not null;
работает.
Вот только я, жертва графических конструкторов запросов, не понимаю - как. И не понимаю, как надо думать, чтобы его придумать. Если есть у тебя время, объясни, пожалуйста, словами, как он работает и как вообще делать эти коррелированные запросы. Как ты при этом рассуждаешь?
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532682
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мысли в слух :)
1)Непонятно, зачем держать дополнительно поле в таблице ( в данном случае -duplicate),не несущее самостоятельного смысла, когда всегда можно получить нужное значение простым (или не очень ) селектом.
2)Если уж возникла крайняя необходимость в таком поле , то лучше его инициализировать во время вставки данных, а не морочить голову апдейтами .
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532704
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВот только я, жертва графических конструкторов запросов, не понимаю - как.

Не пользуйся графическими конструкторами:
- Сначала будет тяжело
- Зато потом, просто (я, например, уже не могу в конструкторе нарисовать, что-то сложнее select * from tbl1 :( )

авторИ не понимаю, как надо думать, чтобы его придумать.
Я тоже плохо понимаю, как надо думать, чтобы такое придумать :(
Вот, например, если в этом запросе поменять left join на inner join, то наверное он не будет работать, а может будет (ну не знаю я :( )

А, вообще, примерно так - выражаешь свою мысль на русском, а потом переводишь в SQL (у меня так)
Вот я написал (достаточно точно сформулировал суть поблемы)
авторЕсли есть в таблице записи с id меньшим текущей и с равным FK, то ставм "ДА", иначе "НЕТ"
И перевел это на SQL:
Если есть в таблице записи с id меньшим текущей = (t1.id > t2.id)
и = and
с равным FK = (t1.fk = t2.fk)
то ставм "ДА" = Set t1.duplicate = true

кстати - если left заменить на inner, то наверное быстрее будет и условие не потребуется :) (хотя могет и ругнуться, что запрос не обновляемый :( )

автори как вообще делать эти коррелированные запросы.
коррелированные - я и словьев-то таких не знаю :(
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532743
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Varan
Представь ,что коррелированный запрос - это некая функция ,получающая входные параметры от основного запроса ,и возвращающая результаты работа в основной запрос.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532764
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIG,
Ну, этот "duplicate" не мною придуман, смысл, видимо, в нем есть, хотя, может быть ту же мысль можно и в другой структуре воплотить. Смысл в том, что надо быстро знать, прервая это строка по данному FK или нет. В тех запросах, где эта структура используется, нет возможности это проверять запросом (они и так на пределе), лучше это просто прочитать.
Можно, наверное, и при вставке (кстати, как?), но мне это что-то в последий момент в голову пришло. Но по смыслу будет почти то же самое, что Paramone предложил.
Блин, их же при удалении придется апдейтить еще...:-(. У меня это как-то из головы вылетело.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532781
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Варан

Да - все глухо :(

А зачем, что-то там запросом насчитывать?

Там где надо проверить, первая это запись или нет пишешь
(DCount("*","test","(id <" & rs("id") & ") and (fk = " & rs("fk") & ")")>0)
Вот и будут твои ДА и НЕТ , только в реальном времени!
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532796
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paparome, там строк больше 500 тыс, это dcount тормозить будет в риалтайме.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532812
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага - будет :)
Индексы накрути

А при удалении записи(записей) где-нить в начале таблы (сортирую по id) вам придется пересмотреть всю таблицу ниже (с большими id) удаленных

Думаете не будет тормозить?

А при вставке ...
хотя привставке только один проход по таблице (в любом случае DCount - тоже самое делает)
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532836
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(c)VIG, Кстати, у Paromone этот запрос и не коррелированный вроде, просто на самообъединении...
Кстати, главная загвоздка, из-за которой я после конструкторов не могу такой запрос составить on (t1.id > t2.id) . Мне б и в голову не пришло такое условие в Join написать. Перетаскивая поля в конструкторе запросов при джойне с одного места на другое, у меня сложился стереотип, что Join выполняется только по равенству, тут же - более сложное условие...
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532865
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, с Inner Join тоже работает.
Ладно, пошел запросы изучать.
Мы строили, строили, и, наконец, построили ... :-(
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532867
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В продолжение темы:
В данном случае ( запросе от paparome) коррелированным запросом и не пахнет.
В запросе есть маленькая ошибка
вместо
Код: plaintext
on (t1.id > t2.id) and (t1.fk = t2.fk)
надо
Код: plaintext
on (t1.id <> t2.id) and (t1.fk = t2.fk)
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532872
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Не надо мой ник перевирать!!
paparome я! (лучше копируй через буфер) :)

2. в качестве условия к join можно писать все что хочешь, но вот представить это в Конструкторе Акс уже не сможет, это ограничение конструктора, а не SQL как такового! (хотя конструктор в MSSQL такие феньки уже понимает :) )
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532882
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIG,
У paparome (приношу извинения за ошибку в нике) правильно, вариант on (t1.id <> t2.id) выдает полную чушь.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532883
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Виг

авторon (t1.id <> t2.id) and (t1.fk = t2.fk)
мотивируй?
Я возражаю :)

авторПосле вставки надо проставить в поле duplicate флаг в те строки, которые уже проходили ранее по данному FK
Проходили ранее (т.е. с меньшим id, но с таким же fk)
А не есть ли еще кроме данной строки еще строки с таким же fk
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532896
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 paparome
При t1.id > t2.id не будет апдейтиться запись с минимальным id
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532910
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПри t1.id > t2.id не будет апдейтиться запись с минимальным id
А и не должна :)
Читаем условие задачи внимательнее

Если запись с минимальным id, значит нет записи с таким же FK, но с id меньшим, чем у этой записи!

В чем непонятки?
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532940
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О!

кстати понял зачем мне left join понадобился (Сапибо Виг :) )

Код: plaintext
1.
Update test t1 left join test t2 on (t1.id > t2.id) and (t1.fk = t2.fk)
set t1.duplicate = iif(isnull(t2.id),false,true);

Это если в поле duplicate полный бардак :)
И при left join все поля будут апдетиться (даже с минимальным id) :)
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532984
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, хрен редьки не слаще :)
Теперь у тебя запись с минимальным id всегда будет false, даже если для нее есть
дубликаты
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532992
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, Виг

Да она и должна быть false !!!
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32532997
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
См. первый пост
там есть пример как должно быть
первые 5 записей уже правильно, как и остаьным 5 такое сделать?
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533005
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо - переформулирую

Все записи имеющие дубликаты по fk должны быть помечены true, кроме первого вхождения! (первое вхождение = false)

Это условия задачи!
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533025
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может она и должна быть false
но логиге это не поддается
имеем
id FK duplicate
1 1 false
2 1 true
получается что запись с id=1 не имеет дупликат, а с id=2 имеет?
может в этом есть какой-то высший смысл, но я его понять не могу.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533027
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Виг, это делается для того, чтобы потом сделать фильтр по этим False и получить все id по одному разу.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533034
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(c)VIG , Я видимо условие плохо разъяснил, если по FK есть дубликаты, но с большим id, то в строке с самым младшим id должно в duplicate должно стоять false, так и надо, а в строках с более старшим id - true. Смысл - пометить false-ом именно первую записанную строчку с даннным FK false в duplicate, а не отметить все строчки, которые имеют дубликатов, тогда бы было совсем просто -
типа такого update test set test.duplicate=true where test.fk in (SELECT test.fk
FROM test GROUP BY test.fk HAVING (((Count(test.fk))>=2)););
Но это решение другой задачи. Видимо название поля duplicate выбрано неудачно :-(
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533037
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Высший смысл есть!

Это поле сигнализирует о том, что в выборке данной таблицы с id меньшим или равным текущему дубликатов нет (или есть)

Не во всей таблице, а именно в ее части, где id <= текущего id.

Ну как тебе еще объяснить?

PS - ладно, больше не буду :)
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533041
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвсе id по одному разу.
все fk по одному разу

Очепятался - бывает :)
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533043
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Угу.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533048
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paparome
А последний твой запрос мне очень по душе пришелся. Он, как бы это сказать, самокорректирующийся. Можно его на Update всей таблицы поставить после каждой группы вставок - удалений - и не париться, что когда-то в duplicate попало не то число...
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533054
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну - дык

Вигу спасибо, а то я парился - зачем это мне left join понадобился :)
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533056
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Специально для Вига - пример такой задачи, который был у меня. Список людей, посетивших курс иврита. Если какой-то человек прошел курс дважды, то при втором его появлении нужно написать: "повторно". Чтобы случайно не посчитать его второй раз.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533065
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч,
Моя еврейская логика говорит мне , что если у меня есть брат-близнец, то и у моего брата-близнеца тоже есть брат-близнец :).
Код: plaintext
это делается для того, чтобы потом сделать фильтр по этим False и получить все id по одному разу.
Не понял.
Если я сделаю фильтр по False , то максимум что я буду знать - то что полученный id первый (возможно единственный ) в группе с одинаковыми FK , но не буду знать если у него дупликаты или нет
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533070
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот - Саныч, он может :)

Взял и все по полочкам разложил :)

Молодца!!!

PS - побольше таких людей!!!
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533071
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Виг, мой пост от 17:10 видел?
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533074
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Special for VIG

Пометить дубликаты : как победить коррелированные запросы?
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533106
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIG смысл флага - идентифицировать первую строчку, записанную в test с данным FK, лучше было бы дать полю флага имя FirstGo и выставлять в True.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533110
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Я видимо условие плохо разъяснил
Да уж. Так бы сразу и сказал , что стоит задача пометить первую запись в группе.
2 Саныч
Когда писал-нет
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533147
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати
Если для поля duplicate сделать по дефолту True
то достаточно будет
Код: plaintext
1.
2.
Update test t1 left join test t2 on (t1.id < t2.id) and (t1.fk = t2.fk)
set t1.duplicate = false
where t2.id is  null;
будет работать значительно быстрее
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533161
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и чем это быстрее моего
Код: plaintext
1.
2.
Update test t1 left join test t2 on (t1.id < t2.id) and (t1.fk = t2.fk)
set t1.duplicate = true
where t2.id is not null;
или, вообще, c inner вместо left
Код: plaintext
1.
Update test t1 inner join test t2 on (t1.id < t2.id) and (t1.fk = t2.fk)
set t1.duplicate = true;
при дефолте = false

Если уж на то пошло, то inner, да еще и без условия, явно будет быстрее left с условием.

Нет?
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533201
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСписок людей, посетивших курс иврита. Если какой-то человек прошел курс дважды, то при втором его появлении нужно написать: "повторно". Чтобы случайно не посчитать его второй раз.
Саныч, а зачем?. Что плата за курс возрастает в геометрической прогрессии
в зависимости от к-ва прохождений ?
имхо проще
Код: plaintext
1.
2.
3.
4.
select count(distinct FIO) from ...     /*для SQL SERVER
или
select count(FIO)                                 /* для  Access
from
 ( select distinct FIO from Mytable) as t
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533217
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Плата от этого тоже зависит - для 2-го и более раза она 50%.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533243
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы пишите быстрее чем я читаю
2 paparome
Потому что в твоем случае обновляются все записи кроме первой,
а в моем - только первая.
У меня Иннер не канает, у тебя запросто- но быстрее от этого не будет
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533253
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Вы пишите, вы пишите, вам зачтется.
Я потом, что непонятно, объясню...
(С) почти Окуджава.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533254
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, все варианты интересны и по-своему хороши. Всем спасибо за помощь!
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533261
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
VIGПотому что в твоем случае обновляются все записи кроме первой, а в моем - только первая.
А каких больше - первых или не первых - зависит от задачи. В моем примере как раз первых было большинство.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533278
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в 17:59 фигню написал
просто
select FIO,count(FIO) from MyTable
group by FIO
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533287
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Этот селект не везде годится. Например, у меня отчет - список учеников по группам. Человек должен фигурировать столько раз, сколько раз он был на курсе. Но там, где он пришел второй раз, должно быть примечание об этом.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533322
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ моем примере как раз первых было большинство.
Твiй тонкiй намьок- зрозумiв
Саныч. Первый - Он всегда один , вторых-может быть много
Имелось в виду первый в группе из одинаковых.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533331
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ты думаешь, я этого не понимаю? 200 человек посетили курс. Из них пятеро по два раза. Итого 200 записей с первыми и 5 со вторыми. Что больше - 200 или 5?
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533344
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч, спорим что можно.
Я так понимаю что один и тот человек не мог учиться более одного раза в одной той же группе ,и при условии что нет однофамильцев ( в этом случае просто надо учитывать и еще что нибудь например теудат зеут)

Код: plaintext
1.
2.
select Id_group, Name,
 iif((select count(*) from MyTable t1 where t1.name=t.name)> 0  ,'Welcome to our course','Лоботряс и двоечник') as Remark
from MyTable t
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533355
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
1. Спорим, что можно что? Я спорю о том, что моя постановка задачи имеет право на существование.
2. То, что ты сейчас написал, не позволяет отличить первый заход от не первого.
3. А по именам я, слава Богу, не смотрю. Я понимаю, что такое бсис нетуним менурмаль. В таблице людей есть счетчик.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533361
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч, а ты думаешь, я этого не понимаю.
Потому и твержу все время, что не нужно нагружать базы абсолютно лишней информацией, котораю при необходимости элементарно получить.
Вот и получается , что при написании запроса и его оптимизации надо еще учитывать ,кто будет преподовать на курсе:
Владимир Саныч, у которого из 200 человек только 5 повторных, или VIG- у которого обратная картина.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533367
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Если все рвутся к тебе по второму разу и готовы платить деньги, то надо радоваться. :^)
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533375
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч, ради бога только не обижайся. Я если в горячке спора и ляпнул что-то лишнее, то не с целью тебя обидеть

авторТо, что ты сейчас написал, не позволяет отличить первый заход от не первого.
А сейчас обижусь я
Не отличает второй заход от третьего и последующих. Но уж первый от второго ....
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533378
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
1. Я и не думал обижаться. Если позвонишь, я тебе улыбнусь в трубку.

2. Твой селект от 19:18 никак не отличает первый заход от второго и т.д.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533388
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А , понял что ты имеешь в виду.
В принципе зависит когда формируется отчет ( или берутся деньги ) -до того, или после.
Если после регистрации
то надо >1
если до , то тут чуть сложнее- реальный запрос зависит от структуры базы, но в принципе это все легко решаемо.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533391
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Блин. Не человека с одним заходом от человека с двумя, а первый заход от второго. У тебя id захода (и проверка на <) отсутствует.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533396
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, Саныч. Но я же написал при каких допущениях это работает.
Для реальной базы могут понадобиться корректировки. Но это же не принципиально.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533398
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Код: plaintext
1.
2.
3.
4.
5.
6.
id     id
захода человека

 1        10 
 2        10 
 3        20 
 4        30 

Твой селект в первых двух строках выдаст одно и то же. При любых допущениях.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533406
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А с умищем то , с умищем что делать! ( из анекдота).
Ну так добавь проверку на id или дату регистрации или еще что-нибудь
Это же не принципиально.
З.Ы. Кстати , а где Varan? Он хотел посмотреть на коррелированный подзапрос. :)
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533407
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
VIGНу так добавь
Но я вообще перестал понимать, что ты хотел доказать селектом от 19:18.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533414
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так я ж сказал- Показать как пишутся коррелированые запросы
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533419
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНо я вообще перестал понимать, что ты хотел доказать селектом
Саныч, я понял.
Подводил тебя к 10000
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533420
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
:^) Так. Я все понял. Снимаю шляпу, прошу прощения и бью себя по морде. Сейчас сотру весь хвост этого топика. Тем самым убью двух зайцев: и (спровоцированных мной) разговоров не по теме будет меньше, и Лифчику дам возможность выпить еще раз.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533422
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Э... Стоп. Ты в том посте что-то мне доказываешь. "Саныч, спорим что можно". Я так и не понял, о чем это.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533430
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну как бы имелось в виду , что можно найти нужную инфу селектом, а не заводить еще одно поле и потом ломать голову ,как правильно его апдейтить.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533432
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Это я с этим спорил? Ухожу на пенсию...
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533446
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот
авторВиг, это делается для того, чтобы потом сделать фильтр по этим False и получить все id по одному разу.
Потом
авторСписок людей, посетивших курс иврита. Если какой-то человек прошел курс дважды, то при втором его появлении нужно написать: "повторно". Чтобы случайно не посчитать его второй раз.
В контексте выступлений предыдущих ораторов сделал вывод , что у тебя тоже есть специальное поле ,в котором ты отмечаешь первый , не первый , и.т.д
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533449
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
У меня такое поле действительно есть. Я действительно привел пример из своей базы, аналогичный примеру из вопроса.

Но я никогда не настаивал, что это наилучшее решение. Я согласен, что такое поле нарушает нормализацию.
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533466
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бог с ним. Ты лучше обьясни , что такое "бсис нетуним менурмаль" - "Ненормальная база данных" или "База данных для ненормальных" ?
...
Рейтинг: 0 / 0
Пометить дубликаты : как победить коррелированные запросы?
    #32533471
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А я все время путаюсь, как правильно по-русски.

нормированная
нормализованная
нормализированная

Хотя и твой вариант заслуживает рассмотрения...
...
Рейтинг: 0 / 0
74 сообщений из 74, показаны все 3 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Пометить дубликаты : как победить коррелированные запросы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]