Реверсирование значений столбцов в командной строке mysql - PullRequest
1 голос
/ 29 марта 2010

У меня есть таблица posts со столбцом published, которая равна 0 (не опубликовано) или 1 (опубликовано). Скажем, я хочу превратить все опубликованные посты в неопубликованные посты, а все неопубликованные посты - в опубликованные посты. Я знаю, что работает

UPDATE posts SET published = '1' WHERE published = '0';
UPDATE posts SET published = '0' WHERE published = '1';

в конечном итоге превратит все мои сообщения в опубликованные. Как я могу выполнить эти запросы в командной строке mysql, чтобы она действительно «реверсировала» значения, в отличие от ошибки, описанной выше?

Спасибо

РЕДАКТИРОВАТЬ: предположим, что типы данных являются строками. Я знаю, что ints / bools - гораздо лучший способ сделать это, но я работаю со строками, и изменение схемы не вариант.

Ответы [ 4 ]

2 голосов
/ 29 марта 2010

Для строк - вы можете использовать любое выражение в предложении SET.

UPDATE posts SET published = IF(published = "1", "0", "1");

CASE версия, спасибо OMG Пони:

UPDATE posts SET published = CASE published WHEN "1" THEN "0" ELSE "1" END;

В обеих версиях, если опубликовано IS NULL, будет установлено значение "1", поскольку любое сравнение с NULL равно false.

2 голосов
/ 29 марта 2010

Использование:

UPDATE posts
   SET published = CASE 
                     WHEN published IS NULL THEN NULL
                     WHEN published = '1' THEN '0'
                     ELSE '1' 
                   END
2 голосов
/ 29 марта 2010

Если это кажется действительно сложным, вы недостаточно об этом думаете.

UPDATE posts SET published = 1 - published;

Должны это сделать или некоторые другие решения (например, использование XOR или CASE).

0 голосов
/ 29 марта 2010

Что вы, ребята, думаете об этом:

UPDATE posts SET published = 'A1' WHERE published = 'A';
UPDATE posts SET published = 'B' WHERE published = 'A';
UPDATE posts SET published = 'A' WHERE published = 'A1';

РЕДАКТИРОВАТЬ: это не правильно удаленно

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