如何使用另一列的值更新特定列的每一行?

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;

(考虑到您的比赛是独一无二的)