MYSQL将查询结果保存到另一个表中

时间:2013-07-26 13:55:43

标签: mysql select syntax insert alias

我希望存储一个查询结果,该查询返回特定列中所有唯一值的列表,以及它们重复的次数:

SELECT col_name, COUNT(*) AS 'total' FROM dataTable GROUP BY col_name;

返回类似于:

的内容

COL_NAME

  • recordA
  • recordB
  • recordC
  • recordD
  • recordE ...

  • 39
  • 91817
  • 982027
  • 211872
  • 256 ...

它工作得很好,正是我需要的。但是我需要将结果存储到另一个表中(例如countTable),所以我不必每次都进行查询,可以将其编入索引......等等。

假设countTable具有与此处结果完全相同的结构。两列:namecount与原始结果的类型相同。

这可能会引起一些笑声,但目前我觉得这很接近:

INSERT INTO countTable (name, count) SELECT col_name, total FROM 
(SELECT col_name, COUNT(*) AS 'total' FROM dataTable GROUP BY col_name);

但我收到错误:ERROR 1248 (42000): Every derived table must have its own alias

我不知道如何正确包装此查询,或者我是否应该在某处使用另一个AS

任何帮助非常感谢!! 感谢

2 个答案:

答案 0 :(得分:2)

您可以在INSERT语句后立即执行SELECT。只要您选择的内容与您要插入的值匹配(在本例中为name和count)。您可以通过单独运行select语句来测试将插入到countTable中的内容。

INSERT INTO countTable (name, count)
SELECT col_name, COUNT(*) AS 'total' 
FROM dataTable 
GROUP BY col_name;

答案 1 :(得分:0)

AH!事实证明我在原始查询中非常接近:

INSERT INTO countTable (name, count) SELECT col_name, total FROM 
(SELECT col_name, COUNT(*) AS 'total' FROM dataTable GROUP BY col_name);

我DID需要在最后添加额外的AS。每个派生表必须确实有自己的别名:)

INSERT INTO countTable (name, count) SELECT col_name, total FROM 
(SELECT col_name, COUNT(*) AS 'total' FROM dataTable GROUP BY col_name) AS count;

但是太空人的回答可以证明我不必要地把它包裹起来。