2009-11-09 4 views
0

Я знаю, как это сделать с помощью PHP, но мне было интересно, обеспечивает ли MySQL более простое решение.MySQL: при обновлении игнорируйте пустые строки

UPDATE users SET fname = 'badooka', lname = '' WHERE user_id='322'; 

Если значение пустое (LNAME, в данном конкретном случае), как я могу игнорировать его, а не перезаписывать оригинал с пустой строкой?

+1

Я согласен с ответом Myles 'UPDATE users SET fname =' badooka ', lname =' 'WHERE user_id =' 322 'AND lname! =' ';' делая это, вы просто игнорируете пустое значение (lname, в данном случае) вместо того, чтобы перезаписывать оригинал пустой строкой. – Rachel

ответ

2

Вы имеете в виду UPDATE users SET fname = 'badooka', lname = '' WHERE user_id='322' AND lname != ''; Или вы имеете в виду, что база данных просто не обновляет это поле, которое пусто? Если последнее, то нет, нет более простого способа, но поражение производительности незначительно для обновления дополнительного поля в строке, которую вы уже обновляете.

1

Попробуйте это:

UPDATE users 
SET fname = IF(CHAR_LENGTH('badooka'),'badooka',fname), lname = IF(CHAR_LENGTH(''),'',lname) 
WHERE user_id='322'; 

Это основная идея. Если CHAR_LENGTH() возвращает 0, он будет использовать исходные значения.

1

Оператор COALESCE выберет первое ненулевое значение своих аргументов

так что если вы хотите обновить только LName когда LNAME не пусто, то я мог бы сделать что-то вроде этого

UPDATE users SET fname = 'badooka', COALESCE(lname, SELECT lname FROM users where user_id='322') where user_id='322' 

является что ты имел в виду? это может быть немного хитом производительности, если вы много делаете, кто-то знает лучший способ?

+1

Хорошо, теперь, когда ответ принят, я вижу, что, очевидно, я неверно истолковал вопрос, не переписывая ненулевое значение с нулевым значением, где искатель имел в виду не переписывать нуль с ненулевым ... ах, хорошо, если люди приходите, я все еще думаю, что это будет ответом, если дело было отменено ... – hgh

+0

Я согласен, извините за путаницу – HyderA

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