2016-04-27 2 views
0

Я просматривал форумы. Я проверил несколько разных методов. Я просто не могу заставить это работать.Дело MySQL в обновлении

ЦЕЛЬ:

Update в следующем столбце, если ответ существует в предыдущей колонке

Q1 в этот момент NULL и я хочу установить 1

Q2 IS NULL и я хочу его остаться NULL, если Q1 IS NULL, если Q1 есть ответ, обновить этот столбец 1

ПРОБЛЕМА:

Обе колонны всегда обновление до 1

ПОПЫТКА:

UPDATE Story1_Responses 
SET Q1 = IFNULL(Q1,'1'), 
Q2 = CASE WHEN Q1 IS NULL THEN NULL ELSE '1' END 
WHERE UserID = 16 

UPDATE Story1_Responses 
SET Q1 = IFNULL(Q1,'1'), 
Q2 = CASE WHEN IFNULL(Q1,'') = '' THEN NULL ELSE '1' END 
WHERE UserID = 16 

UPDATE Story1_Responses 
SET Q1 = IFNULL(Q1,'1'), 
Q2 = CASE WHEN COALESCE(Q1, '') = '' THEN NULL ELSE '1' END 
WHERE UserID = 16 

UPDATE Story1_Responses 
SET Q1 = IFNULL(Q1,'1'), 
Q2 = CASE WHEN Q1 IS NOT NULL THEN '1' ELSE IFNULL(Q2,NULL) END 
WHERE UserID = 16 

МЫСЛЬ:

Мне кажется, что MySQL обновляет первый столбец перед началом второго колонке оценивается, даже если они находятся в том же выполнении инструкции обновления.

+0

"Q2 IS NULL, и я хочу, чтобы остаться NULL, если Q1 IS NULL, если Q1 есть ответ, обновить этот столбец 1" - что, если 'Q2 НЕ NULL'? Оставить его нетронутым? –

+0

Существует также функция ['IF()'] (http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_if). – tadman

+0

Правильный Питер, в конечном итоге у меня есть 10 столбцов, и я просто хочу, чтобы они сохранили свою ценность, если они есть, иначе либо будет null, если предыдущий вопрос не имеет ответа, либо обновите, если это следующий вопрос в очереди. –

ответ

1

Порядок важен. Сначала установите Q2 (потому что он проверяет предыдущее значение Q1), затем установите Q1.

UPDATE Story1_Responses 
SET Q2 = CASE WHEN Q1 IS NULL THEN NULL ELSE '1' END, 
    Q1 = IFNULL(Q1,'1') 
WHERE UserID = 16; 

SQLFiddle

+0

Спасибо, Питер, это действительно так. Это полностью отличается от того, как SQL Server справится с этим. Я должен был подумать о том, чтобы изменить порядок, указанный в разделе #THOUGHTS. Один из тех дней, я думаю. –

Смежные вопросы