使用MySQL中另一个表中的数据在一行中更新一行

时间:2017-09-17 22:51:49

标签: mysql select sql-update

假设我有一个如下所示的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_idfield1field2和table2的table2_idanother_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值的条件?

1 个答案:

答案 0 :(得分:1)

随机选择field1field2,或其中任何一个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
);