假设我有一个如下所示的 table1:
CREATE TABLE IF NOT EXISTS table1
(
table1_id INT NOT NULL,
field1 INT DEFAULT NULL,
field2 INT DEFAULT NULL,
FOREIGN KEY (field1) REFERENCES fields(field_id),
FOREIGN KEY (field2) REFERENCES fields(field_id),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
和表2:
CREATE TABLE IF NOT EXISTS table2
(
table2_id INT NOT NULL,
another_id INT NOT NULL,
field1 INT DEFAULT NULL,
PRIMARY KEY (table2_id , another_id),
FOREIGN KEY (another_id) REFERENCES table1(table1_id),
FOREIGN KEY (field1) REFERENCES fields(field_id),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
我已在 table1_id
列中填充数据, field1
, field2
表 1 和 table2_id
, another_id
表2.
我想要做的是填充数据 field1
表2的列。问题是我希望它是值 field1
来自表1或field2
从表1.我希望它是随机的。如果其中一个为 NULL,则选择另一个,如果两者均为 NULL,则直接输入 NULL。
我可以简单地创建一些 UPDATES 查询并做对吗?不幸的是我不能因为 table2 有超过 5k 行并且我可以执行 5k UPDATE 查询。此外,我不太确定如何让 MySQL 如上所述随机选择 table1 的两个字段之一。让我在下面给你一个示例查询来说明它是如何的。
(我不知道如何在随机列和条件下进行选择,因此我将在查询中忽略它 - 假设在随机条件之外,结果是选择 field1)
UPDATE table2 SET table2.field1 = (SELECT table1.field1 FROM table1 WHERE table1_id = another_id) WHERE another_id = X;
我必须对许多不同的 X 重复上述操作。
所以问题是如何填写field1 of table2
与 field1 or field2 from table1
对于许多 X 值是否符合上述条件?
最佳答案
要随机选择 field1
或 field2
,或非 NULL
中的一个:
UPDATE table2 SET table2.field1 = (
SELECT
CASE
WHEN ( table1.field1 IS NULL AND table1.field2 IS NULL ) THEN NULL
WHEN ( table1.field1 IS NULL ) THEN table1.field2
WHEN ( table1.field2 IS NULL ) THEN table1.field1
ELSE IF( RAND() < 0.5, table1.field1, table1.field2 )
END CASE
FROM table1 WHERE table1_id = another_id
);
关于mysql - 使用 MySQL 中另一表的数据更新多行一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46269579/