我有两个SQL表 - 一个表MODEL只有三列,另一个表我的MASTER表包含所有数据。我在MASTER表中添加了一个新列(MODEL_LONG)。我现在需要使用MODEL表中的数据更新该新列。
MODEL表只有大约40条记录。第一列是MODEL列,另外两列是MODEL_SHORT(模型的缩写名称)和MODEL_LONG(完整的模型名称)。
我需要填充刚添加到MASTER表中的新MODEL_LONG列。我需要检查MASTER TABLE的每个记录中的MODEL名称是什么,并使用MODEL表中相应的MODEL_LONG名称更新MASTER表上的MODEL_LONG列。
以下不起作用(在Oracle SQL Developer中)。我在这里缺少什么?
UPDATE MASTER
SET MASTER.MODEL_LONG = MODEL.MODEL_LONG
FROM MASTER JOIN MODEL
ON MASTER.MODEL = MODEL.MODEL;
答案 0 :(得分:2)
Oracle不支持FROM
中的UPDATE
子句。一种方法使用相关子查询:
UPDATE MASTER
SET MASTER.MODEL_LONG = (SELECT MODEL.MODEL_LONG
FROM MODEL
WHERE MASTER.MODEL = MODEL.MODEL
);
这将更新所有行。没有匹配的人获得NULL
。为了防止这种情况:
UPDATE MASTER
SET MASTER.MODEL_LONG = (SELECT MODEL.MODEL_LONG
FROM MODEL
WHERE MASTER.MODEL = MODEL.MODEL
)
WHERE EXISTS (SELECT MODEL.MODEL_LONG
FROM MODEL
WHERE MASTER.MODEL = MODEL.MODEL
);
答案 1 :(得分:1)
您可以使用Merge Statement更新MASTER TABLE
MERGE INTO MASTER
USING (SELECT * FROM MODEL) MODEL
ON (MASTER.MODEL = MODEL.MODEL)
WHEN MATCHED THEN UPDATE
SET MASTER.MODEL_LONG = MODEL.MODEL_LONG;
尝试在内部查询中使用distinct
关键字,因为ORA-30926
错误意味着源表包含重复的ID /记录。
只是把它分开,看看它是否有帮助。
select distinct * from MODEL;
答案 2 :(得分:0)
如果你的表有适当的唯一键,你可以使用这个:
UPDATE
(SELECT
MASTER.MODEL_LONG as MASTER_MODEL_LONG,
MODEL.MODEL_LONG as MODEL_MODEL_LONG
FROM MASTER JOIN MODEL ON MASTER.MODEL = MODEL.MODEL)
SET MASTER_MODEL_LONG = MODEL_MODEL_LONG;