如果值不存在,则更新Mysql

时间:2012-01-24 17:46:29

标签: mysql sql

我正在尝试写一个非常奇怪的查询,我遇到if语句的问题,所以我在我的表中有2个字段deleted_1deleted_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 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我认为你的问题是null!= null。表达式deleted_2 == null永远不会解析为true。首先,单个=,而不是双重(至少在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)

您的表达式需要“where table.column为null”,“table.column不为null”,或者ifnull()的某些变体:https://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull