我有一张表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)
则表示无效。我怎么能这样做呢?
答案 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;
如果这不能产生您期望的值,那么我就误解了这个问题。