powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / duplicate key при вставке из запроса с group by - как это?
9 сообщений из 9, страница 1 из 1
duplicate key при вставке из запроса с group by - как это?
    #38334648
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пример:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
INSERT INTO `grs_fid_gid` (`c_id`, `g_id`, `a_id`, `is_present`, `status`)
SELECT
  mca.c_id, cg.gid, ma.id, 0, 1
FROM table1 AS ma
JOIN table2 AS ucma ON ucma.ma_id = ma.id AND ucma.c = 6 AND ucma.status = 1    -- оставляем только те из первой, где есть такие 1:1
JOIN table3 AS cg ON cg.Gr = ma.grid AND cg.SGr = ma.sgrid -- дополняем записями отсюда по совпадению М:1
JOIN table4 AS mca ON mca.ma_id = ma.id -- тоже связка дополняющая многими записями М:1
LEFT JOIN table5 AS cpa ON cpa.c_id = mca.c_id AND cpa.ma_id = mca.ma_id -- связка 1:1 с таблице4 историческое расширение данных
WHERE cpa.c_id IS NULL -- только те, где расширенные данные отсутствуют
GROUP BY mca.c_id, cg.gid
;
-- уникальный индекс (`c_id`,`g_id`,`status`)



Поскольку ma.id - однозначно определяется через cg.gid, то агрегатной функции нет.

Вопрос "на засыпку": поработав 30минут (выборка ожидалась в районе 3млн.записей) Перкона вывалилась с сообщением Duplicate key...

На выход идет собственно аргумент группировки, поле имеющее связь 1:1 со вторым аргументом группировки и КОНСТАНТЫ... как такое возможно?

Фактически ожидалось, что количество записей будет эквивалентно количеству записей в т3*т4, соответствующих найденным (их мало) в т1 с ограничением по т2, при условии отсутствия дополнений в т5... толи заработался ужо...
...
Рейтинг: 0 / 0
duplicate key при вставке из запроса с group by - как это?
    #38334654
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А до инсерта таблица была пуста?
...
Рейтинг: 0 / 0
duplicate key при вставке из запроса с group by - как это?
    #38334659
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выдаст ли что-нибудь запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT
  mca.c_id, cg.gid, MIN(ma.id), MAX(ma.id)
FROM table1 AS ma
JOIN table2 AS ucma ON ucma.ma_id = ma.id AND ucma.c = 6 AND ucma.status = 1    -- оставляем только те из первой, где есть такие 1:1
JOIN table3 AS cg ON cg.Gr = ma.grid AND cg.SGr = ma.sgrid -- дополняем записями отсюда по совпадению М:1
JOIN table4 AS mca ON mca.ma_id = ma.id -- тоже связка дополняющая многими записями М:1
LEFT JOIN table5 AS cpa ON cpa.c_id = mca.c_id AND cpa.ma_id = mca.ma_id -- связка 1:1 с таблице4 историческое расширение данных
WHERE cpa.c_id IS NULL -- только те, где расширенные данные отсутствуют
GROUP BY mca.c_id, cg.gid
HAVING MIN(ma.id) <> MAX(ma.id)
...
Рейтинг: 0 / 0
duplicate key при вставке из запроса с group by - как это?
    #38334679
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

Да, она непосредственно перед ним и создавалась отдельной командой.
...
Рейтинг: 0 / 0
duplicate key при вставке из запроса с group by - как это?
    #38334680
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

гарантированно отработает полчаса и выдаст пустое множество... не буду запускать, домой хочу. :)

дело в том что в т3 я перед этим добавил новое поле с этим идентом, дабы не собирать джойны т1 + т2 + т3... встало нормально. И выборка перед вставкой была соответствующая.
...
Рейтинг: 0 / 0
duplicate key при вставке из запроса с group by - как это?
    #38334696
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109miksoft,

гарантированно отработает полчаса и выдаст пустое множество... не буду запускать, домой хочу. :)Можно и завтра :)
Дело в том, что если есть твердая уверенность невозможности дублей, но они случаются, то это либо ложная уверенность, либо баг. Вот этот баг мы и ищем :)
...
Рейтинг: 0 / 0
duplicate key при вставке из запроса с group by - как это?
    #38334739
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

Упс. Завтра запущу. Кстати, тогда вариант с MIN() или MAX() по идее должон отработать "железно", так ведь? Тоже проверю "на всякий случай"... было уже однажды такое - оказалось одна из таблиц по-просту рассыпалась.. тоже завтра натравлю optimize table на всю эту кухню...

Кстати2: часть таблиц реплицируется с другого сервера (тут они slave). optimize table - не развалит реплику случаем?
...
Рейтинг: 0 / 0
duplicate key при вставке из запроса с group by - как это?
    #38335087
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

проверил. Ваш запрос отработал корректно. Записей не найдено. Таблички все целые, склоняюсь к варианту бага. Перкону 5.5 снесли в срочном порядке, вернулись на Мускуль 5.1.47. Разбираться дальше - к сожалению времени нет.

Кстати, со сдачей последней работы (август 2013) - портал переводится полностью в автономную работу и буду совершенно свободен, уже "ищу работу". Предпочтительно - удаленно. (перезд невозможен, есть ипотека)
...
Рейтинг: 0 / 0
duplicate key при вставке из запроса с group by - как это?
    #38335652
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

да, сильно похоже на баг. Мускуль 5.1 - всё сделал без проблем и чуть быстрее: 26сек против 31сек до вывала с ошибкой (вставлено было 3млн. записей из 37.5млн - "чуть-чуть ошибся в количестве" :)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / duplicate key при вставке из запроса с group by - как это?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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