АКМ16 — 02.05.2013 17:02:47

Я знаю среди форумчан есть программисты.
Нужна помощь по SQL синтаксису (БД: MySQL).
Обращаюсь сюда потому что думаю может у кого-то уже есть решение этой задачи (сам тем временем ищу по Гуглу)

ЗАДАЧА

Первоначальный вид SQL:

Код:

 1: INSERT INTO table (val1, val2, val3, hash) VALUES
 2:   ('x', 'y', 'z', 'somehash'),
 3:   ('x', 'y', 'z', 'somehash'),
 4:   ('x', 'y', 'z', 'somehash'),
 5:   ('x', 'y', 'z', 'somehash'),
 6:   ('x', 'y', 'z', 'somehash'),
 7:   ('x', 'y', 'z', 'somehash'),
 8:   ('x', 'y', 'z', 'somehash'),
 9:   ('x', 'y', 'z', 'somehash'),
10:   ... (и т.д. за одно обращение более 200 строк)

Столбец hash является уникальным для каждой строки.

В идеале мне не важно будут ли добавлены строки где hash совпадает, т.к. какие бы данные там не были они не нужны если уже были введены ранее. Если сначала собрать уже имеющиеся данные с БД и проверять с использованием массива, то просто не хватит оперативной памяти (также это доп. нагрузка).

Можете ли предложить какую нибудь SQL конструкцию или идею по этому поводу?

Px — 02.05.2013 17:10:26

2 раза прочёл, но задача всё равно осталась неясной. Тем не менее - http://dev.mysql.com/doc/refman/5.7/en/ … icate.html

АКМ16 — 02.05.2013 17:58:57

Спасибо за идейку, разобрался :yes:
Как раз по ссылке прошел и взял оттуда пару вариантов прогуглил и на StackOverflow нашел выход из данной ситуации.

З.Ы. Задача была в том чтобы за один запрос добавить много строк сразу с учетом что в каждой строке есть одно уникальное значение.
В простом выражении типа:
INSERT INTO table (val1,val2,val3,hash) VALUES ('x','y','z','somehash'),('x','y','z','somehash'),('x','y','z','somehash');

При встрече с дубликатом, весь запрос падает и даже не дублирующиеся данные не попадают в БД.
Смысл был в том чтобы плюнуть на дубликаты и получить (добавить) только строки с уникальной ячейкой hash