插入到…中,使用不同的键进行重复键更新

问题描述 投票:0回答:1

我有4个表,一个表包含需要分配给其他3个表的所有值,具体取决于一列的值。

所以我想在重复键更新上进行插入,但是我面临的问题是我无法在主表上创建与其他3个表相同的键。

如果我这样做,主表(a,b,c,d)上的示例键,而子表上的键将是(a,b,c),该查询是否仍然有效?

我正在使用mysql 5.6

我确实在本地计算机上尝试过,但是虽然我没有遇到任何错误,但是我也没有得到期望的结果。

我的查询看起来像这样

INSERT INTO table2
(a, b, c, d)
SELECT
    a, b, c, d
FROM table1 AS t
WHERE t.id <> 0
ON DUPLICATE KEY UPDATE
                     a = t.a
                     b = t.b
mysql mysql-5.6
1个回答
0
投票

是的,可以查询该模式,但是非常罕见的是我们将更新作为唯一键的一部分的列ab

当由于违反唯一性约束而导致INSERT尝试失败时,ON DUPLICATE KEY部分将对现有行进行UPDATE操作。

鉴于table2的PRIMARY KEY(或UNIQUE KEY)是元组(a,b,c),我们通常只希望更新a,b和c以外的列。

类似这样的东西:

 INSERT INTO table2 (a, b, c, d)

 SELECT s.a
      , s.b 
      , s.c
      , s.d
   FROM table1 s
  WHERE s.id <> 0 

 ON DUPLICATE KEY 
 UPDATE d = VALUES(d)

这是执行我们期望的操作的模式,如MySQL参考手册中所述。

(问题避开了给出一个规范,即“期望结果”是什么的实际描述。提出问题时,我们不能对如何实现期望结果给出任何建议;我们只是在猜测。)

© www.soinside.com 2019 - 2024. All rights reserved.