MySQL:使用来自查询的信息创建一个新表

Posted

技术标签:

【中文标题】MySQL:使用来自查询的信息创建一个新表【英文标题】:MySQL: Creating a new table with information from a query 【发布时间】:2011-09-29 12:43:13 【问题描述】:

mysql 中,我想创建一个包含此查询中所有信息的新表:

select * into consultaa2 from SELECT
 CONCAT(    'UPDATE customers SET
 customers_default_address_id= ',    
 (SELECT a.address_book_id FROM
 address_book a where
 c.customers_id=a.customers_id order by
 address_book_id desc limit 1),    '
 WHERE customers_id = ', customers_id,
 ';') AS sql_statement FROM customers c
 where c.customers_id > 3894;

查询太长,浏览器无法显示连接,我需要它来进行更新。

【问题讨论】:

Daniel Hilgarth 的答案是“正确”的答案 【参考方案1】:

*请注意,此方法不会创建(根据 OP 标题)。为此,请参阅this answer.*


使用来自查询的信息插入表的格式为

INSERT INTO <TABLE-1> 
SELECT * FROM <TABLE-2>

在你的情况下,它会是

insert into consultaa2 
SELECT CONCAT( 'UPDATE customers SET customers_default_address_id= ',
(SELECT a.address_book_id FROM address_book a where c.customers_id=a.customers_id order by address_book_id desc limit 1), ' WHERE customers_id = ', customers_id, ';') AS sql_statement FROM customers c where c.customers_id > 3894;

只需确保要插入的表中的列与选择查询返回的列匹配即可。

【讨论】:

你知道我尝试了同样的方法但没有成功,我只是意识到因为它是一个查询,mysql不知道要创建什么类型的字段,真的很疯狂但通过手动创建表修复和字段:) @daniel-hilgarth 的答案实际上是 Saikios 问题的正确答案,因为它将根据选定的表结构创建新表。 Saikios 查询语法看起来很像执行此操作的 TSQL 语法。【参考方案2】:

你可以这样做:

CREATE TABLE tablename SELECT * FROM othertable;

tablename 是您要创建的新表的名称,SELECT * FROM othertable 是返回应创建表的数据的查询。

【讨论】:

是否可以这样做,但只创建一个临时表? @kevando 是的,它是:CREATE TEMPORARY TABLE tablename AS (SELECT * FROM othertable); 是否可以像这样但在原始查询中添加一个额外的字段?例如,我想为表添加一个主键,如id INT NOT NULL AUTO_INCREMENT PRIMARY KEY。如何做到这一点? 您可以创建一个类似于临时表的视图。它将随着您的 othertable 更新而更新。 CREATE VIEW 表名作为 SELECT * FROM othertable;【参考方案3】:

mysql 创建新表

来自 mysql 命令行的示例。

mysql> create table foo(id int, vorta text);
Query OK, 0 rows affected (0.02 sec)

插入行

mysql> insert into foo values(1, 'for the hoarde');
Query OK, 1 row affected (0.00 sec)

看看里面有什么

mysql> select * from foo;
+------+----------------+
| id   | vorta          |
+------+----------------+
|    1 | for the horde  |
+------+----------------+
1 row in set (0.00 sec)

使用来自查询的信息创建一个新表

mysql> create table foo2 select * from foo;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

检查数据是否移动

mysql> select * from foo2;
+------+----------------+
| id   | vorta          |
+------+----------------+
|    1 | for the horde  |
+------+----------------+
1 row in set (0.00 sec)

【讨论】:

以上是关于MySQL:使用来自查询的信息创建一个新表的主要内容,如果未能解决你的问题,请参考以下文章

mysql mysql之把查询的结果保存到新表(小知识点)

MySQL 无法使用外键创建新表

多对多关系:使用数组或创建新表[重复]

查询:MySQL 表连接

Mysql数据库基本应用

sql将查询结果保存为新表