0

大家好,

假设我们有一个表,其中的值按组划分,并且我们只想为每个组更改一行。让我们举一些例子这是开始的情况:

ID   |   CODE   |  DEFAULT   
-----+----------+-----------
1    |   1234   |     0
2    |   1234   |     0
3    |   1234   |     0
4    |   5678   |     0
5    |   5678   |     0
6    |   7777   |     0
7    |   8888   |     0
8    |   8888   |     0
9    |   8888   |     0

我们想更新DEFAULT,但每个只更新一次CODE

ID   |   CODE   |  DEFAULT   
-----+----------+-----------
1    |   1234   |     0
2    |   1234   |     1
3    |   1234   |     0
4    |   5678   |     1
5    |   5678   |     0
6    |   7777   |     1
7    |   8888   |     0
8    |   8888   |     0
9    |   8888   |     1

我们更新哪个并不重要,我们只想要一个CODE

实际上,我只能在一个SELECT DISTINCTthen 处思考,使用循环,SELECT ... LIMIT 1然后,如果有结果,UPDATE但这确实是一个肮脏的解决方案......我确信它可以通过一个(或几个)查询来完成...

有任何想法吗?

4

1 回答 1

1

您可以在为每个代码返回一行的子查询上使用UPDATE带有 a 的语句:JOIN

update yourtable t1
inner join
(
  select min(id) minId
  from yourtable
  group by code
) t2
  on t1.id = t2.minid
set t1.`default` = 1

请参阅带有演示的 SQL Fiddle

于 2013-02-28T12:00:48.897 回答