使用 INSERT 查询将行从一个表复制到另一个表 [关闭]

Posted

技术标签:

【中文标题】使用 INSERT 查询将行从一个表复制到另一个表 [关闭]【英文标题】:Copy rows from one table onto another using INSERT query [closed] 【发布时间】: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 个列?另外,我可以使用视图来执行此操作,还是必须使用表格?提前致谢!

【问题讨论】:

插入...选择... 您能给我一个这样的问题吗? 不,我想你可以解决这个问题。 【参考方案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(或任何真正的)表似乎也很愚蠢。

以上是关于使用 INSERT 查询将行从一个表复制到另一个表 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

调用触发器时将行从一个表复制到另一个表

将行从一个表复制到另一个表

如何将行从一个 Excel 工作表复制到另一个工作表并使用 VBA 创建重复项?

将行从一个表复制到另一个表时如何解决数据截断错误,两个表具有相同的模式?

将行从一个链接表插入到另一个链接表

将行从一个表插入到另一个表中,哪个 sql 更有效(外连接 vs 顺序扫描)