假设我有一个如下所示的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;
和table2:
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的列table1_id
,field1
,field2
和table2的table2_id
,another_id
的数据。
我想要做的是填写table2的field1
列的数据。问题是我希望从table1获得值field1
或从table1获得field2
。我希望这是随机的。如果其中一个为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值的条件?
答案 0 :(得分:1)
随机选择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
);