Обновление MySQL, если значение не существует - PullRequest
1 голос
/ 24 января 2012

Я пытаюсь написать довольно странный запрос, и у меня возникают проблемы с оператором if, поэтому у меня есть 2 поля deleted_1 и deleted_2 в моей таблице, которые я хочу обновить, так что я так думаю должно быть:

Update `messages`
  if(`deleted_1` == null) SET `deleted_1` = 1
  else
  if(`deleted_2` == null) SET `deleted_2 = 1
  ---and here goes some simple WHERE statements

но в принципе это не работает, я хочу проверить, не заполнено ли поле a, а затем обновить его, если нет, проверить поле b, и если оно пустое, обновить поле b, я не уверен, что возможно сделай это более простым способом, я совершенно заблудился здесь:)

Ответы [ 2 ]

3 голосов
/ 24 января 2012
UPDATE MyTable
SET deleted_2 = CASE WHEN ISNULL(deleted_1, '') == '' OR ISNULL(deleted_2, '') != '' THEN deleted_2 ELSE 1 END,
    deleted_1 = CASE WHEN ISNULL(deleted_1, '') != '' THEN deleted_1 ELSE 1 END

это говорит:

deleted_1: will be update if (deleted_1 == null)
deleted_2: will be updated if (deleted_1 != null && deleted_2 == null), 
           This is to match your if else condition
1 голос
/ 24 января 2012

Я думаю, что ваша проблема в том, что null! = Null.выражение deleted_2 == null никогда не будет преобразовано в true.Во-первых, single =, а не double (по крайней мере, в mysql), во-вторых, попробуйте следующее:

mysql> select false = null;
+--------------+
| false = null |
+--------------+
|         NULL |
+--------------+
1 row in set (0.00 sec)

mysql> select true = null;
+-------------+
| true = null |
+-------------+
|        NULL |
+-------------+
1 row in set (0.00 sec)

mysql> select null != null;
+--------------+
| null != null |
+--------------+
|         NULL |
+--------------+
1 row in set (0.01 sec)

mysql> select null = null;
+-------------+
| null = null |
+-------------+
|        NULL |
+-------------+
1 row in set (0.00 sec)

Ваше выражение должно быть либо «где table.column равно нулю», «где table.column равноnot null ", или некоторое изменение ifnull (): https://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull

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