尝试更新包含聚合函数(计数)的选择案例语句时出错
Posted
技术标签:
【中文标题】尝试更新包含聚合函数(计数)的选择案例语句时出错【英文标题】:Error when trying to update a select case statement that contains an aggregate function (count) 【发布时间】:2014-10-06 20:45:54 【问题描述】:目的: 我想根据列的文本和列出的每个 item_number 的文本计数来验证单个列中的文本是否属于特定类别(item_numbers 预计会被列出不止一次,其中包含 4 行(计数),带有 'textA' 和 2 行(count) with 'textB')。
但是,如果 item_number 不符合特定类别,那么我希望返回一条消息,指出存在差异。
当前结果: 我收到此错误消息:SQL 错误:ORA-00933:SQL 命令未正确结束
脚本:
UPDATE TableA
SET TableA.Column1 = T.Count
from TableA JOIN (
select TableA.item_1,TableA.object_2,
case
when count(object_2) !=4 and dobject_2 = 'textA'
then 'ERROR_A'
WHEN COUNT(object_2) !=2 AND object_2 = 'textB'
ELSE 'ERROR_B'
END AS Count
from TableA
JOIN ac on (TableA.item_1 = ac.item_1 and TableA.object_2 = ac.object_2)
where ac.object_3 in ('textC','textD',null)
group by TableA.item_1,TableA.object_2
)T on TableA.item_1 = t.item_1 and TableA.object_2 = t.object_2;
【问题讨论】:
Oracle 不支持update
语句中的join
。另外,我正在删除“mysql”标签,因为错误消息来自 Oracle。
【参考方案1】:
您的查询有很多问题,但我认为这可能是您正在寻找或接近的:
update tablea a
set column1 = (select (case when count(object_2) <> 4 and object_2 = 'textA'
then 'ERROR_A'
when COUNT(object_2) <> 2 and object_2 = 'textB'
then 'ERROR_B'
end)
from ac
where TableA.item_1 = ac.item_1 and TableA.object_2 = ac.object_2 and
(ac.object_3 in ('textC', 'textD') or ac.object_3 is null)
group by object_2
);
除了明显的语法问题(因为Oracle不支持update
中的join
),还有:
case
语句缺少then
子句(我将else
更改为then
)。
in
列表中的NULL
是荒谬的;它什么也没做,所以我添加了一个单独的检查。
SQL 使用<>
表示“不等于”,尽管许多数据库确实支持!=
。
【讨论】:
感谢您的更新。但是,该脚本不起作用。为了澄清“AC”不是一个表,它是一个别名。 TableA 是唯一使用的表。请指教。 @tcc 。 . .join ac
。在您的原始查询中,ac
是一个表或视图。
@Gordon...我从 Stack 上的一个示例中获得了 join 语句。它不能正常工作。实际上我只使用 1 个表来得出结果。 ac 可以删除它不是一个实际的表。
UPDATE TableA SET TableA.Column1 = T.Count from TableA JOIN (select TableA.item_1,TableA.object_2, case when count(object_2) !=4 and dobject_2 = 'textA' then 'ERROR_A' WHEN COUNT(object_2) !=2 AND object_2 = 'textB' ELSE 'ERROR_B' END AS 从 TableA 计数 JOIN TableA on (TableA.item_1 = TableA.item_1 and TableA.object_2 = TableA.object_2) where TableA.object_3 in (' textC','textD',null) 按 TableA.item_1,TableA.object_2 )T 在 TableA.item_1 = t.item_1 和 TableA.object_2 = t.object_2 上分组;以上是关于尝试更新包含聚合函数(计数)的选择案例语句时出错的主要内容,如果未能解决你的问题,请参考以下文章
sql - 使用聚合函数(最小值/最大值)作为选择语句的一部分