SQL 插入到 with join 和 where

SQL Insert into with join and where

我有三个 table。例如:

  1. 新表:

    config_id  | name
    12         | null                    
    22         | null                   
    
  2. 旧表:

    oldTable_id | name   | value
    1           | Jack   | 10                  
    2           | Frank  | 22         
    
  3. 关联表:

    config_id    | oldTable_id
    12           | 1                    
    22           | 2   
    

我现在要做的是: 我想将 name 列从 oldTable 移动到 newTable。我已经更改了 newTable 并添加了一个空的 name 列。现在我正在尝试编写正确的 INSERT INTO 语句。我到目前为止是:

INSERT INTO newTable (name)
SELECT name
FROM oldTable ot join associativeTable at on  ot.oldTable_id = at.oldTable_id
WHERE at.config_id = newTable.config_id;

我有点迷路了。我以前写过 INSERT INTO 语句,但从来没有写过关联 table。正确的陈述如何寻找我的案例?

非常感谢您直接插入另一个 table 已经准备好的值的感觉。这确实是涉及大型 table 的实用解决方案。 我想我有一个更简单的方法:) 您可以简单地执行以下操作:

INSERT INTO newTable
SELECT name FROM oldTable;

如果这不起作用请告诉我。

我根据另一个网站的解释解决了它。工作 sql 脚本如下所示:

UPDATE newTable
    INNER JOIN associativeTable ON (associativeTable.config_id = newTable.config_id)
    INNER JOIN oldTable ON (associativeTable.oldTable_id = oldTable.oldTable_id)
    SET newTable.name = oldTable.name;

一种方法是在 SET 部分使用子查询:

UPDATE newtable n
   SET n.name = (SELECT name 
                   FROM oldtable o 
                   JOIN associativetable a 
                     ON o.oldtable_id = a.oldtable_id 
                    AND a.config_id = n.config_id  
                );

db<>fiddle