如果我有两个表,如下所示,第一个显示原始数据,第二个表显示原始数据的压缩版本:
raw_table:
val
1
1
2
2
2
3
3
4
comp_table:
val count
1 2
2 3
3 2
4 1
我想将raw_data压缩到另一个表
INSERT INTO comp_table VALUES (
SELECT val, COUNT(val) FROM raw_table
WHERE val NOT IN(
SELECT val FROM comp_data
) GROUP BY val
)
第一个问题: 上面的语法是否正确?
第二个问题: 计数已更新,进行更新的最有效查询是什么?
注意:数据大小超过raw_table
提前致谢:D
答案 0 :(得分:1)
该查询可能会有效,但这是ON DUPLICATE KEY UPDATE的一个很好的用例:
INSERT INTO comp_table (val, val_count)
SELECT
val, 1
FROM comp_data
ON DUPLICATE KEY UPDATE val_count = val_count + 1;
第一次运行插入查询时,它将插入值并将计数设置为1.在此之后插入相同的值时,计数将递增。
注意:要使其正常工作,您必须在comp_table中的val列上拥有唯一键。
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
答案 1 :(得分:0)
从我从Bradym那里得到的信息:归功于他
INSERT INTO comp_data
SELECT val, COUNT(val) FROM raw_data GROUP BY val
ON DUPLICATE KEY
UPDATE
count = (SELECT COUNT(val) FROM raw_data WHERE raw_data.val = comp_data.val)
尝试和测试:D