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:使用来自查询的信息创建一个新表的主要内容,如果未能解决你的问题,请参考以下文章