[英]Oracle: Update where error
社区早安。
我已经使用MSSQL一段时间了,并且在MSSQL中还没有遇到这个问题,因此这似乎是Oracle处理sql的一种方式。 基本上,我需要根据where条件更新表DANIEL_ALERT中的两列。 但是,我得到了“ ORA-00904:“ ALERT_CATEORIES”。“ ALERT”:无效的标识符。我确信这只是oracle执行与MSSQL不同的操作的方式。
任何想法将不胜感激。 先感谢您 :)
UPDATE DANIEL_ALERT
SET DANIEL_ALERT.ALERT_CATEGORY = ALERT_CATEGORIES.INDICATION,
DANIEL_ALERT.ALERT_THEME = ALERT_CATEGORIES.THEME
WHERE DANIEL_ALERT.ALERT_NAME = ALERT_CATEGORIES.ALERT;
commit;
不知道表的结构和内容是什么样子,您可以采用这种方法,可以一起使用,也可以替代已经发布的完美的MERGE
答案:
UPDATE DANIEL_ALERT DA
SET (DA.ALERT_CATEGORY, DA.ALERT_THEME) = (
SELECT AC.INDICATION, AC.THEME
FROM ALERT_CATEGORIES AC
WHERE AC.ALERT = DA.ALERT_NAME
)
WHERE EXISTS (
SELECT NULL
FROM ALERT_CATEGORIES AC
WHERE AC.ALERT = DA.ALERT_NAME
);
UPDATE DANIEL_ALERT DA
SET (DA.ALERT_CATEGORY, DA.ALERT_THEME) = (
SELECT AC.INDICATION, AC.THEME
FROM ALERT_CATEGORIES AC
WHERE AC.ALERT = DA.ALERT_NAME
)
WHERE EXISTS (
SELECT NULL
FROM ALERT_CATEGORIES AC
WHERE AC.ALERT = DA.ALERT_NAME
);
在Oracle中,通常最好使用MERGE
语句来用另一个表中的值更新表。 就像是:
merge into DANIEL_ALERT d
using ALERT_CATEGORIES c
on (d.ALERT_NAME = c.ALERT)
when matched then update
set ALERT_CATEGORY = c.INDICATION,
ALERT_THEME = c.THEME
;
尝试:
更新DANIEL_ALERT设置t1.ALERT_CATEGORY = t2.INDICATION,t1.ALERT_THEME = t2.THEME from DANIEL_ALERT t1内联接ALERT_CATEGORIES t2在t2.ALERT = t1.ALERT_NAME
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.