mysql - 使用 MySQL 中另一表的数据更新多行一列

标签 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;

和表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 table2field1 or field2 from table1对于许多 X 值是否符合上述条件?

最佳答案

要随机选择 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
);

关于mysql - 使用 MySQL 中另一表的数据更新多行一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46269579/

相关文章:

MySQL 连接字符串拒绝连接

sql - 是否可以在 SQL 中使用 'Where' 子句仅显示仅包含字母和数字的字段?

mysql - 如何更新redbeanphp中的表

mysql - 从重复数据中选择唯一数据的查询速度更快

mysql - 在sql中使用for语句从2个表中选择

android - 在 SQLite 中通过一次查找根据内容更新文本列

sql - 使用 PostgreSQL 更新前 N 个值

mysql - mysql高级排序,根据action id排序

php - 如果从数据库中的唯一 ID 查找详细信息,MySQL 语句会是什么?

mysql - 无法重命名mysql表