只是想知道为什么下面的选择不工作:
SELECT
A.FIELD1
, (SELECT PCN FROM (select B.PRIORITY, B.PCN
from
TABLE2 B
WHERE B.CUST= A.CUST
ORDER BY B.PRIORITY)
WHERE ROWNUM = 1) AS PCN
FROM TABLE1 A;
第2行错误:ORA-00904:"A"。"客户":无效标识符
值得注意的是:
- 表1具有字段FIELD1、CUST。
- 表2具有字段PCN、优先级、客户。
先谢了。
5条答案
按热度按时间ttcibm8c1#
你的查询不应该给你这个错误消息,当你删除外部的qery就会发生这种情况
| 字段1|多氯联苯|
| - ------|- ------|
| 1个|1个|
fiddle
q3qa4bjr2#
嵌套内联选择(多于一层)时,内部嵌套选择引用父块的能力将无法保持。因此,由于这种嵌套,您对TABLE2的查询无法看到TABLE1中的列。
试试这个:
这对于报表查询非常有效。如果您最终针对特定客户添加了过滤器,那么如果您有足够新的Oracle版本支持OUTER APPLY,那么您最好使用OUTER APPLY。
xuo3flqw3#
你可以试试这个:
获取前1行只获取第一个有序记录。适用于12c及以上,支持嵌套,不需要第二个子查询。
u91tlkcl4#
另一种选择可能是CTE。
样本数据:
查询从这里开始。按优先级对行排序,然后获取排序最高的行(第20行):
3df52oht5#
您可以使用
first
聚合函数来实现相同的功能(假设您具有完全确定性的order by
),而无需嵌套子查询:对于这个样本数据
退货
| 字段1|多氯联苯|
| - ------|- ------|
| 1个|1个|
| 第二章|(无)|
SQL小提琴