2012-01-24 5 views
1

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

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 поле теперь я не знаю, может быть, можно сделать это более простым способом, я совсем потерялся здесь :)

+0

Обновление Mysql, если значение не существует или Mysql INSERT, если значение не существует? – Sarfraz

+0

Нет, мне нужно обновить – Linas

ответ

3
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 
+0

Hmm запрос идет без ошибок, но он не обновляет ни одного поля, и даже если оба поля пусты или только 1 из них пуст – Linas

+0

@Linas Я обновил запрос к учетной записи пустым ('') до он будет работать, только если значение NULL –

1

Я думаю, ваша проблема в том, что нуль = нуль. выражение deleted_2 == null никогда не будет разрешено как истинное. Во-первых, одиночные =, а не в два раза (по крайней мере, в 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 не является нулевым "или какой-либо вариант ifnull(): https://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull

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