【问题标题】:SQL Insert into with join and whereSQL Insert into with join 和 where
【发布时间】:2021-09-22 17:12:38
【问题描述】:

我有三张桌子。例如:

  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 语句,但在我有关联表时从未写过。正确的陈述将如何适用于我的案例?

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。
  • 我认为您正在寻找 UPDATE 声明而不是 INSERT?您要更新现有行,现在插入新行
  • 你是对的。所以我需要类似于:UPDATE newTable nt INNER JOIN associativeTable at on nt。 config_id = 在。 config_id SET nt.name = oldTable.name WHERE oldTable。 oldTable_id = at.oldTable_id;

标签: mysql sql join select where-clause


【解决方案1】:

一种方法是在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

【讨论】:

    【解决方案2】:

    我根据另一个网站的解释解决了这个问题。工作 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;
    

    【讨论】:

      【解决方案3】:

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

      INSERT INTO newTable
      SELECT name FROM oldTable;
      

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

      【讨论】:

      • 如果不指定 newTable 中的哪一行与 oldTable 匹配,不确定如何工作。然而,它返回一个错误,因为列数与两个表都不匹配。
      • 哦,好吧,让我再回顾一下。顺便说一句,你得到的答案似乎也是正确的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      相关资源
      最近更新 更多