Обновление записей в MySQL с ON DUPLICATE KEY UPDATE без учета пустых ячеек

278
02 августа 2017, 20:13

Здравия прочитавшим!

При обновлении данных в базе используется файл *.xls, в нем бывают пустые ячейки в записях - по задумке, надо что бы они не стирали имеющиеся записи в базе данных, если совпали. Делаю стандартное обновление записей путем провоцирования конфликта ключей по полю ID

INSERT INTO `orders` (`id`,`name`,`status`) 
VALUES ('1','Иван','OK'),('2','Марья','OK') 
ON DUPLICATE KEY UPDATE 
`name` = VALUES(`name`),
`status` = VALUES(`status`);

Но к сожалению, пустые ячейки стирают соответствующие записи в базе. Все обновляет нормально. Пробовал посредством PHP, но ничего дельного не приходило в голову. Кто сталкивался с подобными случаями, может есть идеи? Спасибо.

Answer 1

в нем бывают пустые ячейки в записях

Что попадает в формируемый запрос в секцию VALUES, если некая ячейка "пустая"? небось пустая строка? т.е. получается нечто вроде

INSERT INTO `orders` (`id`,`name`,`status`) 
VALUES ('1','Иван','OK'),('2','Марья','')

Верно?

Если так - то вместо пустой строки формируйте там Null, а в секции ODKU сделайте соотв. обёртку:

INSERT INTO `orders` (`id`,`name`,`status`) 
VALUES ('1','Иван','OK'),('2','Марья',Null) 
ON DUPLICATE KEY UPDATE 
`name` = COALESCE(VALUES(`name`),`name`),
`status` = COALESCE(VALUES(`status`),`status`);
READ ALSO
Как вызвать класс в Java? [требует правки]

Как вызвать класс в Java? [требует правки]

Всем привет!Мне нужно сделать чтоб при выполнении определённого условия,загружался("включался" определённый java файл(класс))Как можно реализовать...

302
Можно ли изменить направление recyclerview?

Можно ли изменить направление recyclerview?

Стандартное направление recyclerview это сверху-внизТ

266
Почему не открывается JDBC postgresql connection?

Почему не открывается JDBC postgresql connection?

Приложение развернуто на HEROKUТам добавил в окружение HEROKU-POSTGRESQL версия 9

429