这是我的表:
// 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 |
+----+------+
答案 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个。