Вставка MySQL при обновлении дублированного ключа с помощью coalesce () вызывает синтаксическую ошибку в Java - PullRequest
1 голос
/ 16 августа 2011

Я пытаюсь сделать обновление, сохраняя старое значение, если новое - NULL, SQL-запрос -

INSERT INTO scheme (id,type) 
VALUES (1,1) ON DUPLICATE KEY 
UPDATE scheme 
SET type=COALESCE(1,type) 
WHERE id=1

текст ошибки

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET type=COALESCE(1,type)
WHERE id=1' at line 4
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    at com.mysql.jdbc.Util.getInstance(Util.java:381)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)

Полагаю, мне просто не хватает чего-то очевидного, но я не могу понять: (

1 Ответ

2 голосов
/ 16 августа 2011

Вам никогда не понадобится WHERE в запросе ON DUPLICATE KEY (и он всегда должен прерываться в MySQL) - конфликтующая строка уже найдена, и поскольку их не может быть две, необходимо обновить эту.Подразумевается WHERE.

Попробуйте вместо этого:

INSERT INTO scheme (id,type) 
VALUES (1,1) ON DUPLICATE KEY 
UPDATE scheme 
SET type=COALESCE(1,type) 
...