【问题标题】:Store records in a new table created by a query in mysql将记录存储在由 mysql 中的查询创建的新表中
【发布时间】:2015-12-14 05:18:35
【问题描述】:

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

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

【问题讨论】:

  • 您的意思是locationCreatedNew 表尚未创建,您想在运行此SQL 时创建它吗?
  • 是的。我想通过查询创建 locationCreatedNew 表。

标签: mysql sql database


【解决方案1】:

您在 OP 中的示例代码是 SQL Server 中的语法,而在 MySQL 中的对应部分类似于:

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

【讨论】:

    【解决方案2】:

    参考:CREATE TABLE ... SELECT

    对于CREATE TABLE ... SELECT,目标表不保留有关选定表中的列是否为生成列的信息。语句的 SELECT 部分无法为目标表中生成的列赋值。

    可能会发生一些数据类型的转换。例如,AUTO_INCREMENT 属性不保留,VARCHAR 列可以成为 CHAR 列。重新训练的属性是 NULL(或 NOT NULL),对于那些具有它们的列,CHARACTER SETCOLLATIONCOMMENTDEFAULT 子句。

    使用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 期间进行并发插入。 p>

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

    请查看更多信息。希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      使用如下查询。

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

      【讨论】:

      • 我需要在表上执行连接,所以在这种情况下这不会有帮助
      • 我试过下面的查询,效果很好。创建表 temp as SELECT user_role_id, role, user_roles.username FROM user_roles , users where users.username = user_roles.username;
      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多