仅更新具有类似特征的一组结果中的一行

时间:2013-02-28 11:53:42

标签: php mysql select distinct

美好的一天,

让我们假设我们有一个表,其值分组,我们想要为每个组仅改变一行。让我们举一些例子,这是开始的情况:

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 DISTINCT进行思考,然后使用循环取SELECT ... LIMIT 1然后,如果有结果,UPDATE但它确实是一个肮脏的解决方案..我确信可以用一个(或几个)查询来完成......

任何想法?

1 个答案:

答案 0 :(得分:1)

您可以在子查询上使用带有UPDATE的{​​{1}}语句,该子查询为每个代码返回一行:

JOIN

请参阅SQL Fiddle with Demo