一些背景 - 我有一个导出的CSV数据集,它将被导入/迁移到新系统中。我在此数据集中没有识别ID,因为新系统中不需要它,但我现在需要在此CSV中添加一些其他数据。
我已将CSV导入Oracle表并创建了2个新列 - FieldLabelEDRN和ELEMENTID。我想用原始表中的相关数据更新这两列,所以我尝试了以下
UPDATE EDRN_NEW.DATADIC
SET FIELDLABELEDRN =
(SELECT short_name
FROM edrn.md$$_all_data_elements
WHERE active_yn = 'YES'
ORDER BY short_name
),
SET ELEMENTID =
(SELECT element_id
FROM edrn.md$$_all_data_elements
WHERE active_yn = 'YES'
ORDER BY short_name
)
产生ora-00907错误,我知道它非常基本。我正在努力想办法获得我需要的价值。我还尝试在short_name = field标签上加入2个表,只需将element_id作为我真正需要的东西,但我不熟悉不能使用JOIN Oracle的更新
任何意见/建议都将不胜感激
答案 0 :(得分:1)
Oracle提供了更新多列的简便方法。但是,您需要一些方法将临时表中的行与现有表进行匹配。
语法如下:
UPDATE EDRN_NEW.DATADIC dd
SET (FIELDLABELEDRN, ELEMENTID) =
(SELECT short_name, element_id
FROM edrn.md$$_all_data_elements ade
WHERE active_yn = 'YES' AND
ade.?? = dd.??
);
但是您需要某种方式来匹配行,因此您需要在ade.?? = dd.??
中填写详细信息。
您可能会将UPDATE
与INSERT
混淆。你想要这个吗?
INSERT INTO EDRN_NEW.DATADIC(FIELDLABELEDRN, ELEMENTID)
SELECT short_name, element_id
FROM edrn.md$$_all_data_elements ade
WHERE active_yn = 'YES' ;