我正在尝试写一个非常奇怪的查询,我遇到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
字段现在我是不确定是否有可能以更简单的方式做到这一点,我在这里迷失了:)
答案 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