【问题标题】:Copy rows from one table onto another using INSERT query [closed]使用 INSERT 查询将行从一个表复制到另一个表 [关闭]
【发布时间】:2013-03-16 23:59:07
【问题描述】:

我有一个包含 158 列和 22,000 行的表,我还有另一个空表,我希望根据来自用户的 WHERE 条件动态插入值。 SELECT 查询将如下所示:

SELECT * FROM mygrist_tables WHERE suic_att>=5 AND gender='M'

这给了我大约 9,000 条记录(比如说)。我想将这些记录插入另一个表(只是这个过滤数据)。可能吗?谁能告诉我 INSERT 查询的外观以及我是否需要使用所有这 158 个 cloumns 创建另一个表,或者 INSERT 查询是否可以动态创建所有这 158 个列?另外,我可以使用视图来执行此操作,还是必须使用表格?提前致谢!

【问题讨论】:

  • 插入...选择...
  • 您能给我一个这样的问题吗?
  • 不,我想你可以解决这个问题。

标签: mysql select insert records


【解决方案1】:

听起来您想将上面的SELECT 语句和INSERT 的结果运行到一个不存在的新表中。如果是这样,这应该工作:

SELECT * INTO YourNewTable
FROM mygrist_tables 
WHERE suic_att>=5 AND gender='M'

假设 YourNewTable 已经存在,那么您需要运行 INSERT INTO:

INSERT INTO YourNewTable 
SELECT * 
FROM mygrist_tables 
WHERE suic_att>=5 AND gender='M'

您可能需要指定不同的列。

EDIT - 重新读取 cmets 并实现 DB 是 MySQL,要从 SQL 语句创建新表,您应该使用:

CREATE TABLE YourNewTable
SELECT *
FROM mygrist_tables 
WHERE suic_att>=5 AND gender='M';

http://dev.mysql.com/doc/refman/5.0/en/create-table.html

【讨论】:

  • 实际上,我在新表中确实只有一个 P_ID 列,而旧表中不存在该列。我怎样才能更新这个查询?因为当我尝试运行查询时出现此错误:错误代码:1136。列数与第 1 行的值计数不匹配
  • @SharadhaJayaraman -- INSERT INTO YourNewTable (Col1,Col2,etc.) SELECT Col1,Col2,etc FROM... -- 不幸的是,您必须在这种情况下指定列名... 最佳运气。
  • 所有 158 列? :(
  • 我是否必须重新创建新表中的所有 158 列?
  • @SharadhaJayaraman -- 不幸的是你的 cmets 没有意义 -- 你要么有一个现有的表,在这种情况下你需要使用 INSERT INTO,或者你没有可以使用 SELECT * INTO 的地方。如果您使用 SELECT * INTO,它将为您创建表/列。这样做可能更容易,然后添加新列。如果没有,您可以使用此查询来获取所有列名(因此您不必全部输入): select group_concat(column_name) from information_schema.columns where table_name = 'yourtable'。祝你好运!
【解决方案2】:

您可以使用 SELECT INTO 语法

SELECT * 
INTO MyNewTable
FROM mygrist_tables WHERE suic_att>=5 AND gender='M'

但是您将无法像这样插入到已经存在的表中。如果您的表已经存在,您将使用

INSERT INTO MyOldTable
([LIST OUT YOUR COLUMNS HERE])
SELECT [LIST OUT YOUR COLUMNS HERE] 
FROM mygrist_tables WHERE suic_att>=5 AND gender='M'

【讨论】:

  • 我如何硬编码 [在此处列出您的列] 中的所有 158 列?没有更好的方法吗?
  • 我的意思是@sgeddes 在他的回答中提到的......如果您选择的表格与您插入的表格不同,您必须列出列。如果它们相同,您可以使用 *
  • 这真的很糟糕。我处于类似的困境中,手动输入 50 个不同的列名似乎是对 MySQL 的愚蠢期望。我猜 percona 的修改工具是这个世界上唯一有意义的东西。
  • 具有 50 多个列的 mysql(或任何真正的)表似乎也很愚蠢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 2011-10-17
  • 2019-10-28
相关资源
最近更新 更多