MySQL - на дубликате ключа - СЛУЧАЙ, КОГДА ЭТО ДРУГОЕ не работает
Я хочу вставить запись (uid, A, B) в базу данных. Если запись уже существует, я обновлю столбцы "A" и "B" с условием: ( P. Jairaj = старая запись; [2] = новая запись)
A = (B[1] == B[2]) ? A[1] : A[2];
B = B[2] + 1;
Мой запрос:
INSERT INTO TableName (uid,A,B)
VALUES (uid,A[2],B[2])
ON DUPLICATE KEY
UPDATE A= (SELECT CASE B WHEN B[2] THEN A ELSE A[2] END),
B= B[2]+1;
Ex1:
Old entry : uid = 1; A = 2; B = 4;
New entry : uid = 1; A = 3; B = 4;
-> Should be: A = 2; B = 5;
But my result: A = 3; B = 5; -> FAIL
Ex2:
Old entry : uid = 1; A = 2; B = 4;
New entry : uid = 1; A = 3; B = 6;
-> A = 3; B = 7; (my code works well in this ex) -> OK
Большое спасибо.
Ответ 1: уберите ключ SELECT, чтобы он заработал
INSERT INTO TableName (uid,A,B)
VALUES (uid,A[2],B[2])
ON DUPLICATE KEY
UPDATE A= (CASE B WHEN B[2] THEN A ELSE A[2] END),
B= B[2]+1;
Ответ P. Jairaj
INSERT INTO TableName (uid,A,B)
VALUES (uid,A[2],B[2])
ON DUPLICATE KEY
UPDATE A= (IF(B=B[2],A,A[2])),
B= B[2]+1;
1 ответ
Решение
Попробуй это:
INSERT INTO TableName (uid,A,B)
VALUES (uid,A[2],B[2])
ON DUPLICATE KEY
UPDATE A= (IF(B=B[2],A,A[2])),
B= B[2]+1;