CREATE TABLE test ( key INT a CHAR(1), -6ren">
gpt4 book ai didi

Mysql "safe"合并

转载 作者:行者123 更新时间:2023-11-29 15:03:43 26 4
gpt4 key购买 nike

我有一个表,其中每行的字段数据都不完整,我想要修复。

这就是我的意思:

mysql> CREATE TABLE test (
key INT
a CHAR(1),
b CHAR(1),
c CHAR(1),
);
mysql> CREATE TABLE test2 (
key INT
a CHAR(1),
b CHAR(1),
c CHAR(1),
);
mysql> INSERT INTO test (1,'','','');
mysql> INSERT INTO test (2,'X','','');
mysql> INSERT INTO test (3,'','Y','');

mysql> INSERT INTO test2 (2,'X','','Z');
mysql> INSERT INTO test2 (4,'X','Y','Z');

我想基于“key”字段非破坏性地将 test2 数据“合并”到 test 中,以便:

  • 如果测试中的某个字段对于给定键已具有非空值,则会保留该值。
  • 如果 test 中的某个字段具有空值,并且 test2 中的相应字段不为空,则 test2 中的值将替换 test 中给定键的相应字段。
  • 如果 test 和 test2 中的字段均非空且不同,则不执行任何操作。

“合并”后,我希望“测试”表数据如下所示:

(1,'','','');
(2,'X','','Z');
(3,'','Y','');
(4,'X','Y','Z');

有点像填补测试表中的洞而不破坏任何东西。

有人能想出一种方法来做到这一点吗?

最佳答案

MySQL 针对这种情况有一个特殊功能:)

INSERT INTO test2 VALUES (2, 'X', '', 'Z')
ON DUPLICATE KEY UPDATE a='X', c='Z';
INSERT INTO test2 VALUES (4, 'X', 'Y', 'Z')
ON DUPLICATE KEY UPDATE a='X', b='Y', d='Z';

关于Mysql "safe"合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2604172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com