将记录存储在mysql中由查询创建的新表中

时间:2015-12-14 05:18:36

标签: mysql sql database

我有两个表,location和locationdata。我想使用join从两个表中查询数据,并将结果存储在MySQL中尚未出现的新表(locationCreatedNew)中。我可以在MySQL中执行此操作吗?

  

SELECT location.id,locationdata.name INTO locationCreatedNew FROM   location RIGHT JOIN locationdata ON   location.id = locationdata.location_location_id;

3 个答案:

答案 0 :(得分:1)

OP中的示例代码是SQL Server中的语法,MySQL中的示例代码类似于:

 CREATE TABLE locationCreatedNew 
 SELECT * FROM location RIGHT JOIN locationdata 
 ON location.id=locationdata.location_location_id;

答案 1 :(得分:0)

使用如下的查询。

create table new_tbl as
select col1, col2, col3 from old_tbl t1, old_tbl t2
where condition;

答案 2 :(得分:0)

Referance:CREATE TABLE ... SELECT

对于 CREATE TABLE ... SELECT ,目标表不保留有关selected-from表中的列是否为生成列的信息。语句的SELECT部分​​无法将值分配给目标表中的生成列。

可能会发生某些数据类型转换。例如,不保留 AUTO_INCREMENT 属性, VARCHAR 列可以成为 CHAR 列。再培训属性为 NULL (或 NOT NULL ),对于那些具有它们的列, CHARACTER SET COLLATION COMMENT DEFAULT 子句。

使用 CREATE TABLE ... SELECT 创建表时,请确保在查询中为任何函数调用或表达式设置别名。如果不这样做, CREATE 语句可能会失败或导致不合需要的列名。

CREATE TABLE newTbl
SELECT tbl1.clm, COUNT(tbl2.tbl1_id) AS number_of_recs_tbl2
FROM tbl1 LEFT JOIN tbl2 ON tbl1.id = tbl2.tbl1_id
GROUP BY tbl1.id;

注意newTbl是您要创建的新表的名称。您可以使用SELECT * FROM othertable这是一个返回应该从中创建表的数据的查询。

您还可以在创建的表中明确指定列的数据类型:

CREATE TABLE foo (a TINYINT NOT NULL) SELECT b+1 AS a FROM bar;

对于 CREATE TABLE ... SELECT ,如果给出 IF NOT EXISTS 并且目标表存在,则不会向目标表中插入任何内容,并且该语句不是记录。

为确保二进制日志可用于重新创建原始表, MySQL 不允许在 CREATE TABLE ... SELECT 期间进行并发插入。

您不能在CREATE TABLE new_table SELECT ... FROM old_table等语句中将 FOR UPDATE 用作 SELECT 的一部分....如果您尝试这样做,请使用语句失败。

请检查一下。希望这能帮助你。