Как обновить столбец на основе результата сравнения для другого столбца - PullRequest
1 голос
/ 04 октября 2011

Я могу легко найти нужные мне строки с помощью этих операторов SQL:

SELECT COUNT(*) FROM `individuals` WHERE `company_zip` != '';
SELECT COUNT( * ) FROM `individuals` WHERE length( `company_zip` ) > 0;
SELECT COUNT( * ) FROM `individuals` WHERE strcmp( `company_zip`, '' ) != 0;

И, вероятно, есть еще 100 способов сделать это.

Однако ...

Попробуйте использовать их в выражении UPDATE

UPDATE `individuals` SET `company_country` = 1 WHERE `company_zip` != '';
UPDATE `individuals` SET `company_country` = 1 WHERE length( `company_zip` ) > 0;
UPDATE `individuals` SET `company_country` = 1 WHERE strcmp( `company_zip`, '' ) != 0;

И я получаю такие ответы:

0 row(s) affected. ( Query took 0.5920 sec )

Признаюсь, я устал от просмотра страниц справочника и поисков в Google, чтобы понять этоиз.Какой принцип mysql мне здесь не хватает?В операторе SELECT легко сосчитать строки, но те же критерии не работают для оператора UPDATE.Это ошибка?

Черт!Я понял это перед публикацией.Так что я дам любой интересующийся ответ.Я случайно добавил поле company_country со значением по умолчанию 1, и поэтому все записи получили значение по умолчанию '1'.Таким образом, mysql пытался обновить поля, но обнаружил, что они уже были установлены на 1. Очищение их позволило запросам UPDATE работать.Не берите в голову.Отправка для тех, кто делает аналогичную ошибку.

Брэдли

1 Ответ

1 голос
/ 17 декабря 2011

OK.Точнее говоря, поскольку во всех записях поле 'company_country' уже установлено в 1, mysql кратко говорил мне, что он не ОБНОВЛЕН или не изменил ни одну из записей.Они начали с того, что для этого поля было установлено значение 1, а затем для этого поля было установлено значение 1. Проверьте людей по умолчанию, особенно если кто-то еще настраивал таблицу.Я мог бы набрать

UPDATE `individuals` SET `company_country` = 1;

, и ответ был бы таким же.Пострадали 0 строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...