powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Пометить дубликаты : как победить коррелированные запросы?
25 сообщений из 74, страница 2 из 3
Пометить дубликаты : как победить коррелированные запросы?
    #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
25 сообщений из 74, страница 2 из 3
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Пометить дубликаты : как победить коррелированные запросы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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