我有一个包含2列的表:id和count。 Count是异或(其中只有一个可以同时为1)。我需要更新count = 1的行,并且需要将前一个计数1设置为0。
我认为有两种策略:
1)在表格上做一个选择,找到1的行。 在0更新它。 将我想要的行更新为1。
2)全局更新计数0处的表。 将我想要的行更新为1。
在第一种情况下,我做3查询,但“小”。 在第二种情况下,我做了2个查询,但其中一个是“大”。
哪种策略更好?
答案 0 :(得分:2)
如果您只是在两行上交换值,则可以在一个查询中执行此操作。
例如
+----+-------+
| id | count |
+----+-------+
| 1 | 0 |
| 2 | 0 |
| 3 | 1 |
+----+-------+
使用自联接进行更新:
update myTable a, myTable b set
a.`count` = b.`count`,
b.`count` = a.`count`
where a.id = '2'
and b.id = '3'
结果:
+----+-------+
| id | count |
+----+-------+
| 1 | 0 |
| 2 | 1 |
| 3 | 0 |
+----+-------+
如果要定位特定行,也可以这样做。 例如。 id为1的行的计数应为1,当前计数为1的行应重置为0。
update myTable a, myTable b set
a.`count` = 1,
b.`count` = 0
where a.id = '1'
and b.`count` = '1'