为什么IN()子句会影响一行?

时间:2018-04-18 06:09:40

标签: mysql sql

这是我的表:

// mytable
+----+------+
| id | seen |
+----+------+
| 1  | NULL |
| 2  | NULL |
| 3  | NULL |
+----+------+

现在我需要看到前两行。这是我的疑问:

update messages set seen = 1 where id IN('1,2');

会使第一行的seen等于1。为什么不是第二排?

这是输出:

+----+------+
| id | seen |
+----+------+
| 1  | 1    |
| 2  | NULL |
| 3  | NULL |
+----+------+

2 个答案:

答案 0 :(得分:1)

删除“IN”子句中的''。

update messages set seen = 1 where id IN(1,2);

id是一个整数,而不是character/string

答案 1 :(得分:1)

Mysql将尝试将字符串'1,2'隐式转换为整数,并将停止在字符串中的第一个非整数字符,以便

MariaDB [sandbox]> select 1 = '1,2';
+-----------+
| 1 = '1,2' |
+-----------+
|         1 |
+-----------+
1 row in set, 1 warning (0.00 sec)

返回的值是1(true) 而

MariaDB [sandbox]> select 1 = '2,2';
+-----------+
| 1 = '2,2' |
+-----------+
|         0 |
+-----------+
1 row in set, 1 warning (0.00 sec)

返回值0(false)

如果您将字符串中的值切换为“2,1”,则只会更新2个。