2013-01-17 60 views
0
update COLORS 
set COLORS.AR = 'RED' 
where COLORS.GCRS = 'FIRST' 
and (case when max(NEWAPP."AGE") > 60 
and count(NEWAPP."AGE") > 0) 

我得到一个错误,指出“组的功能在这里不允许”更新是根据是否存在另一个表的记录,是表> 60

有谁知道我能做些什么来防止这种错误?

标题非常说,我可以关于目标的一切。

+0

'NEWAPP',我想是另一张桌子。 “NEWAPP”表和“AR”表之间是否存在某种关系?或者你真的只关心'NEWAPP'表中有'AGE'大于60的行吗?通常情况下,您需要进行某种连接,以确定是否在'NEWAPP'中存在与'AR'行相关的行,并且具有特定的值。 –

+0

我真正关心的是NEWAPP中是否有任何记录。“AGE”的值超过60 – Deprecated

+0

好的。 'colors.ar'是表的名字吗?还是表格中的一列?你使用它作为两者(你正在更新名为'colors.ar'的表格并设置一个名为'colors.ar'的列)。这是不可能的 - 任何一个或其他必须是不正确的。 –

回答

1

如果真的有表

UPDATE colors 
    SET colors.ar = 'RED' 
WHERE colors.gcrs = 'FIRST' 
    AND EXISTS(SELECT 1 
       FROM newapp 
       WHERE age > 60) 

这将是非常不寻常的,但是,在一个适当的数据模型有一个情况下,你想要做一个不相关的子查询像这样没有任何关系。通常情况下,会有一些列将colors表与newapp表相关联,并且您需要在该关系的EXISTS子查询中添加一个谓词。

+0

这很有效,谢谢。我知道我正在使用的桌子很糟糕。部分原因是我实际上首先编写此查询。我得到“组函数”错误,因为我试图在同一个where子句中同时使用count和max吗? – Deprecated

+0

@ user1821973-你得到'ORA-00934'是因为你有一个聚合函数作为不允许的谓词。但即使没有这种情况,由于'boolean'在SQL中不是一个有效的数据类型(假设这是一个错误,因为你的'CASE'语句格式错误(没有'then','else'或'end'),你会收到一个错误你希望'case'语句返回一个布尔值),并且因为你试图引用一个你没有从中选择的表(除了已更正的表的名称的问题)。 –

相关问题