如何使用另一列的值更新特定列的每一行?
How do I update every row of a particular column with values from another column?
我正在尝试使用查找 table 中可能的三个值来更新名为 software_id 的列。因此,使用 id 列的软件 table 中的值更新用户软件的软件 id 列。但是软件中只有三行table。在用户软件中 table 有 1000 多个。但是当我 运行 下面的查询只有三行得到更新,其余的保留为空。
Softwares id 列是数字,变为 1,2,3 并且 user_sofwares software_id 列全部为空。
当我运行下面的查询。
UPDATE user_software c
SET sotware_id = (
SELECT DISTINCT id
FROM softwares
WHERE id = c.id
);
仅更新目标 table 的前三行。我希望 user_softwares 列中的每一行都更新为 1,2 或 3。例如,它应该是 1,2,3,1,2,3。
每当我尝试更新所有行时,我总是收到此错误
Error report - ORA-01427: single-row subquery returns more than one row
您可以使用 MERGE
语句执行此操作:
MERGE INTO (SELECT software_id, 1, ora_hash(ROWID, 2) + 1 AS fake_id
FROM user_software) u_soft
USING (SELECT DISTINCT id
FROM softwares) sftw
ON (sftw.id = u_soft.fake_id)
WHEN MATCHED THEN UPDATE SET u_soft.software_id = sftw.id;
(考虑到您的比赛是独一无二的)
我正在尝试使用查找 table 中可能的三个值来更新名为 software_id 的列。因此,使用 id 列的软件 table 中的值更新用户软件的软件 id 列。但是软件中只有三行table。在用户软件中 table 有 1000 多个。但是当我 运行 下面的查询只有三行得到更新,其余的保留为空。
Softwares id 列是数字,变为 1,2,3 并且 user_sofwares software_id 列全部为空。
当我运行下面的查询。
UPDATE user_software c
SET sotware_id = (
SELECT DISTINCT id
FROM softwares
WHERE id = c.id
);
仅更新目标 table 的前三行。我希望 user_softwares 列中的每一行都更新为 1,2 或 3。例如,它应该是 1,2,3,1,2,3。
每当我尝试更新所有行时,我总是收到此错误
Error report - ORA-01427: single-row subquery returns more than one row
您可以使用 MERGE
语句执行此操作:
MERGE INTO (SELECT software_id, 1, ora_hash(ROWID, 2) + 1 AS fake_id
FROM user_software) u_soft
USING (SELECT DISTINCT id
FROM softwares) sftw
ON (sftw.id = u_soft.fake_id)
WHEN MATCHED THEN UPDATE SET u_soft.software_id = sftw.id;
(考虑到您的比赛是独一无二的)