如何根据最常见的字段更新值?

时间:2013-07-23 10:45:25

标签: mysql select join

我有一张表table1,如:

ID  | Content
-------------
1   | run2
2   | run3
3   | run1
2   | run2
2   | run2
2   | run1
2   | run2
2   | run1

另一张表table2

Content  | ID
----------------
runX     | 1
runX     | 2
runX     | 2
runX     | 3

我想运行一个查询,使用table1中最常见的Content为每个Content自动更新table2 ID。在查询之后就是这样,表2将是:

Content  | ID
----------------
run2     | 1
run2     | 2
run1     | 3

我尝试在ID匹配时将table1加入table2,但如果我将Content设置为max(Content)则表示无效。我怎么能这样做呢?

1 个答案:

答案 0 :(得分:0)

您可以使用相关子查询执行此操作:

update table2
    set content = (select content
                   from table1 t1
                   where t1.id = table2.id
                   group by content
                   order by count(*) desc
                   limit 1
                  );

但是,这并没有消除table2中的额外行。您需要执行此操作作为额外步骤。也许您会满足于返回结果的简单查询:

select id,
       (select content
        from table1 t1
        where t1.id = table2.id
        group by content
        order by count(*) desc
        limit 1
       ) as content
from table2;

您甚至可以将其直接保存到另一个表格中。

编辑:

我很惊讶这些结果不正确。这样做是对的吗?

select id,
       substring_index(group_concat(content order by cnt desc), ',', 1) as MostCommon
from (select id, content, count(*) as cnt desc
      from table1
      group by id
     ) t
group by id;

如果这不能产生您期望的值,那么我就误解了这个问题。