【发布时间】:2016-05-05 19:07:03
【问题描述】:
Table:T1 (key, numval, state) and T2(key, foreignkey:T1.key, type)
我有两个表 T1 和 T2,每个 T1 有多个值 T2。对于 T2 中的每个值,T1 中都有一个值。
考虑到我在 T2 中有两种类型('A','B'),我必须计算映射到每个 T1 键的 T2 的数量,状态为“A”和“B”并将其设置为 T1 .state 分别
如何在 Oracle 中完成此操作?
类似于下面的帖子(但解决方案不起作用): how to update a column in a table with unique values, but not all the rows, not incremented
使用上面的源代码 - 我使用了以下脚本:
UPDATE T1
SET VALUE =
CASE
WHEN (SELECT STATE FROM T1 WHERE KEY = EACH_KEY) = 'S1'
THEN
(SELECT COUNT(*) FROM T2
WHERE KEY = EACH_KEY AND TYPE = 'A'
WHEN (SELECT STATE FROM T1 WHERE KEY = EACH_KEY) = 'S2'
THEN
(SELECT COUNT(*) FROM T2
WHERE KEY = EACH_KEY AND TYPE = 'B'
END
WHERE EACH_KEY in (select distinct KEY from T1);
但是oracle抛出如下错误:
Error at Command Line : 13 Column : 8
Error report -
SQL Error: ORA-00904: "EACH_KEY": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
编辑#1:
表格中的样本数据
执行前
T1
key numval state
1 0 S1
2 0 S2
3 0 S1
4 0 S1
T2
key t1key type
1 1 A
2 1 B
3 1 B
4 2 A
5 2 B
6 2 B
7 3 B
8 4 A
9 4 A
10 4 B
执行后(预期结果)
T1
key numval state
1 1 S1
2 2 S2
3 0 S1
4 2 S2
编辑#2:
是的,未定义标识符。我想知道如何在 Oracle SQL 中定义这样的标识符,以便执行上述计算。
【问题讨论】:
-
如果您可以更新您的问题以在两个表中显示一些示例数据以及您期望的输出,将会很有帮助。类似于this question 会很好。
-
另外,“each_key”是从哪里来的? Oracle 消息是正确的;它不是 t1 中的列(至少,根据您提供的表的描述)。
标签: oracle oracle11g oracle-sqldeveloper