gpt4 book ai didi

sql - Oracle SQL Plus WITH 子句 "invalid identifier"

转载 作者:行者123 更新时间:2023-12-02 14:33:13 25 4
gpt4 key购买 nike

数据库使用 SQL *Plus 11.2 在 Oracle Database 11g 上运行。聚合方法是否不允许出现在WITH子句中,或者WITH是否做了一些神奇的事情?这段代码告诉我“most_expense”是一个无效的标识符。然而,子查询可以正常工作。

WITH most_expensive AS (SELECT MAX (enrollment_cost) FROM Enrollments)
SELECT e.member_id
FROM Enrollments e
WHERE e.enrollment_cost = most_expensive;

最佳答案

查询分解(带有子句)允许您定义临时表别名。在您的示例中,most_expense 将引用包含单行和单列的表对象。您可以在查询中可以使用表的任何位置使用它。现在,如果您创建一个名为 t1 的表(使用 create table 语句),为其指定一列并插入 1 行,您仍然无法执行“WHERE x = t1”。
换句话说,子查询并不总是与表相同,WITH 子句提供的行为类似于表,而不是子查询。

以下方法有效:

WITH most_expensive AS (SELECT MAX (enrollment_cost) FROM Enrollments)
SELECT member_id
FROM Enrollments e
WHERE e.enrollment_cost = (select * from most_expensive);

http://sqlfiddle.com/#!4/9eecb7/6340

关于sql - Oracle SQL Plus WITH 子句 "invalid identifier",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32983495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com