在某些版本的 Oracle 中,相关子查询是否有嵌套限制?

2024-02-19

这是可以帮助您理解我的问题的代码:

create table con ( content_id number);
create table mat ( material_id number, content_id number, resolution number, file_location varchar2(50));
create table con_groups (content_group_id number, content_id number);

insert into con values (99);
insert into mat values (1, 99, 7, 'C:\foo.jpg');
insert into mat values (2, 99, 2, '\\server\xyz.mov');
insert into mat values (3, 99, 5, '\\server2\xyz.wav');
insert into con values (100);
insert into mat values (4, 100, 5, 'C:\bar.png');
insert into mat values (5, 100, 3, '\\server\xyz.mov');
insert into mat values (6, 100, 7, '\\server2\xyz.wav');

insert into con_groups values (10, 99);
insert into con_groups values (10, 100);

commit;

SELECT m.material_id,
       (SELECT file_location 
          FROM (SELECT file_location
                  FROM mat
                 WHERE mat.content_id = m.content_id
              ORDER BY resolution DESC) special_mats_for_this_content            
         WHERE rownum = 1) special_mat_file_location                                     
  FROM mat m
 WHERE m.material_id IN (select material_id 
                           from mat
                     inner join con on con.content_id = mat.content_id
                     inner join con_groups on con_groups.content_id = con.content_id
                          where con_groups.content_group_id = 10);

请将查询末尾的数字 10 视为参数。换句话说,这个值在本例中只是硬编码的;它会根据输入而改变。

我的问题是:为什么我会收到错误

"M"."CONTENT_ID": invalid identifier 

对于嵌套的相关子查询?是否存在某种嵌套限制?需要对结果集中的每一行运行此子查询,因为结果将根据 content_id 进行更改,而每行的 content_id 可能不同。我如何使用 Oracle 来实现这一目标?

我并不是想开始 SQL Server 与 Oracle 的讨论,但我有 SQL Server 背景,我想指出以下等效查询在 SQL Server 上运行良好:

create table con ( content_id int);
create table mat ( material_id int, content_id int, resolution int, file_location varchar(50));
create table con_groups (content_group_id int, content_id int);

insert into con values (99);
insert into mat values (1, 99, 7, 'C:\foo.jpg');
insert into mat values (2, 99, 2, '\\server\xyz.mov');
insert into mat values (3, 99, 5, '\\server2\xyz.wav');
insert into con values (100);
insert into mat values (4, 100, 5, 'C:\bar.png');
insert into mat values (5, 100, 3, '\\server\xyz.mov');
insert into mat values (6, 100, 7, '\\server2\xyz.wav');

insert into con_groups values (10, 99);
insert into con_groups values (10, 100);

SELECT m.material_id,
       (SELECT file_location 
          FROM (SELECT TOP 1 file_location
                  FROM mat
                 WHERE mat.content_id = m.content_id
              ORDER BY resolution DESC) special_mats_for_this_content            
               ) special_mat_file_location                                     
  FROM mat m
 WHERE m.material_id IN (select material_id 
                           from mat
                     inner join con on con.content_id = mat.content_id
                     inner join con_groups on con_groups.content_id = con.content_id
                          where con_groups.content_group_id = 10);

您能帮我理解为什么我可以在 SQL Server 中执行此操作,但不能在 Oracle 9i 中执行此操作吗?如果存在嵌套限制,我如何在 Oracle 中的单个选择查询中完成此操作,而不诉诸循环和/或临时表?


最新版本的 Oracle 没有限制,但大多数旧版本的 Oracle 有嵌套限制1级别深。

这适用于所有版本:

SELECT  (
        SELECT  *
        FROM    dual dn
        WHERE   dn.dummy = do.dummy
        )
FROM    dual do

此查询在 12c 和 18c 中有效,但在 10g 和 11g 中无效。 (但是,至少有一个 10g 版本允许此查询。并且 11g 中有一个补丁可以启用此行为。)

SELECT  (
        SELECT  *
        FROM    (
                SELECT  *
                FROM    dual dn
                WHERE   dn.dummy = do.dummy
                )
        WHERE   rownum = 1
        )
FROM    dual do

如果有必要,您可以使用窗口函数(您可以在SQL Server too:)

SELECT  *
FROM    (
        SELECT  m.material_id, ROW_NUMBER() OVER (PARTITION BY content_id ORDER BY resolution DESC) AS rn
        FROM    mat m
        WHERE   m.material_id IN
                (
                SELECT  con.content_id
                FROM    con_groups
                JOIN    con
                ON      con.content_id = con_groups.content_id
                WHERE   con_groups.content_group_id = 10
                )
        )
WHERE   rn = 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在某些版本的 Oracle 中,相关子查询是否有嵌套限制? 的相关文章

  • Oracle内置函数元数据

    有没有办法获取 Oracle 内置聚合和其他功能的元数据 例如AVG STDDEV SQRT ETC 我需要知道对象 id 和参数元 In the SYS ALL OBJECTS查看我找不到任何有用的东西 我也尝试过搜索SYS ALL AR
  • 在 MySQL 中插入时检查并防止相似字符串

    简要信息 我有3张桌子 Set id name SetItem set id item id position TempSet id 我有一个函数可以生成新的随机组合Item桌子 基本上 总是在成功生成之后 我在中创建一个新行Set表 获取
  • mysql LIKE 查询时间太长

    SQL SELECT COUNT usr id as total results FROM users as usr LEFT JOIN profile as prof ON prof uid usr uid WHERE usr usern
  • 在 Access 数据库中对列包含数字和字母的数据进行排序

    请帮助我 因为我一直无法做到这一点 选择此列 columnA 的访问 SQL 是什么 以便它返回一个结果集 其中的不同值首先根据数字排序 然后根据字母排序 这是列值 10A 9C 12D 11G 9B 10C 9R 8T 我尝试过 从 tb
  • 日志中每天的每周活跃用户数

    我想知道是否有人可以帮助我使用一些 SQL 来返回两天或更长时间内登录到数据库表的唯一用户数量 让我们使用 7 天作为参考 我的日志表在每一行中包含时间戳 ts 和 user id 表示该用户当时的活动 以下查询返回此日志中的每日活跃用户数
  • MySQL 跨表计数(*) 查询帮助

    SELECT name COUNT AS count FROM t1 t2 WHERE t2 id t1 id GROUP BY t2 id 我想从 t1 获取名称以及 t2 中 id 与 t1 相同的行数 到目前为止我已经得到了上面的内容
  • 数据库级别的别名列名 [MySQL]

    别名 可能是错误的词 因为它是在将列 表名称作为查询中的其他名称引用的上下文中使用的 我感兴趣的是是否有一种方法可以在数据库中为列指定两个名称 如果我要打印这样的表格 它看起来会是这样的 mysql gt SELECT FROM User
  • 在 where 子句中使用聚合函数和不同的列条件

    select PO Order Qty Avg PO Order Qty as totalAverage FROM FirstStrike Retail custom Whse Pricing QR where item code 111
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • 在 azure Devops 管道中部署 SQL 时遇到错误

    我在 azure Devops 的发布管道中使用 sql DACPAC 类型的部署 但出现以下错误 我对 SQL 不了解 有什么建议吗 Publishing to database database name on server Serve
  • 手动更改postgresql中查询的执行计划?

    是否可以在postgresql中手动更改执行计划的操作顺序 例如 如果我总是想在过滤之前进行排序操作 尽管这在 postgresql 的正常使用中没有意义 是否可以通过例如手动强制执行该操作改变运营的内部成本 如果我实现自己的功能呢 是否可
  • SQL命令文本到DataSet的直接方法

    如果我有 sql 命令 获取数据集的最直接途径是什么 string sqlCommand SELECT FROM TABLE string connectionString blahblah DataSet GetDataSet sqlCo
  • Oracle如何将UTC时间转换为本地时间(缺少偏移信息)

    我有一个包含日期列的表 我认为该列中的日期是以 UTC 格式保存的 我希望检索日期时以当地时间打印 这意味着当我从德国调用日期时 结果应该是这样的 2015 04 29 11 24 06 0200UTC EUROPE BERLIN 我尝试了
  • Oracle 删除约束级联等效于 Sql Server

    在Oracle中 删除约束PK SAI我使用语法 ALTER TABLE SAISIE DROP CONSTRAINT PK SAI CASCADE SQL Server 中与此等效的是什么 您正在考虑与实际 DELETE 语句相关的 FO
  • SQL Server 批量插入 - “批量加载数据转换错误”

    bulk insert dbo A FROM d AData csv WITH FIELDTERMINATOR ROWTERMINATOR n 将批量数据插入数据库时 在检查可疑数据后 我遇到了无法解释的错误 消息 4867 16 级 状态
  • 删除重复的行并需要在mysql中保留所有行中的一个[重复]

    这个问题在这里已经有答案了 我想删除基于两列的重复行 但需要保留所有行 1 行 重复行可以多于两行 例如 ID NAME PHONE 1 NIL 1234 2 NIL 1234 3 NIL 1234 4 MES 5989 我想从上面 3 行
  • nvarchar 值“3001822585”的转换溢出了 int 列

    我使用以下方法将 Excel 文件导入到 SQL Server Excel 文件将所有值作为字符串 我可以导入文件 除了Barcode SalePrice and Price2 我收到错误 nvarchar 值 3001822585 条形码
  • 如何将事物的组合映射到关系数据库?

    我有一个表 其记录代表某些对象 为了简单起见 我假设该表只有一列 这是唯一的ObjectId 现在我需要一种方法来存储该表中的对象组合 组合必须是唯一的 但可以是任意长度 例如 如果我有ObjectIds 1 2 3 4 我想存储以下组合
  • 创建日期范围表

    我正在编写一份需要显示每天值的报告 我有查询的开始日期和结束日期 但我希望避免丢失日期 以防表不包含特定日期的值 我正在考虑创建一个基本日期范围表 其中包含开始和结束之间的所有日期 然后将其与数据表左连接以显示每一天的值 我找到了一些适用于
  • 在 SQL 中按键组对行进行顺序编号?

    SQL中有没有办法按顺序添加行号按关键组 假设一个表包含任意 CODE NAME 元组 示例表 CODE NAME A Apple A Angel A Arizona B Bravo C Charlie C Cat D Dog D Dopp

随机推荐

  • Jsoup 未下载整个页面

    网页是 http www hkex com hk eng market sec tradinfo stockcode eisdeqty pf htm http www hkex com hk eng market sec tradinfo
  • IdentityServer4分别对每个客户端进行身份验证

    我使用两个不同的客户端 IdentityServer4提供API保护和登录表单 我可以配置客户端以避免单点登录吗 我的意思是 即使我登录了第一个客户端 我也需要登录第二个客户端 我的ID4配置 internal static IEnumer
  • Highcharts 进度条形图

    是否可以在 Highcharts 中创建这样的进度图表 https 0 s3 envato com files 84221450 screenshots weblator responsive charts 7 bootstrap jpg
  • Jackson->Jackson + HttpPost =“无效的UTF-8中间字节”,设置Mime和编码

    我在我的客户端中使用 Apache HTTP 客户端库和 Jackson 当我将 JSON 发布到服务器时 出现错误 org codehaus jackson JsonParseException Invalid UTF 8 middle
  • 完全适合初学者使用 Maphilight?

    我正在尝试使用名为 maphilight 的 jquery 插件 我对使用 jquery 插件完全陌生 我对其他网页设计编码有相当多的经验 甚至对 javascript 有一点经验 但实际上尝试像这样实际使用它 这是第一次 我只是无法让这个
  • 运算符重载的基本规则和习惯用法是什么?

    注 答案已在特定订单 但由于许多用户根据投票而不是给出的时间对答案进行排序 因此这里有一个答案索引按照最有意义的顺序 C 中运算符重载的一般语法 https stackoverflow com questions 4421706 opera
  • 使用 Ant 构建 Android 项目 -- 找不到符号

    我正在尝试使用 ant 构建我的 android 项目 它在 eclipse 中运行良好 我运行错误并显示以下构建失败行 BUILD FAILED android sdks tools ant build xml 680 The follo
  • 前台服务在执行互联网相关操作时被杀死

    更新 以前我找不到关于我的前台服务何时被终止的明确定义的模式 经过对发生这种情况的设备 并非所有设备上都发生 进行更多调试后 我发现了 1 很多时候 当我打开 chrome 加载网站时 前台服务会被终止 有时甚至当我使用 Whatsapp
  • 是否可以在同一页面上使用多个 h1 标签,但样式不同?

    我有一个网页 我在各个 DIV 中多次使用 h1 标签 并且我将每个 div 的 h1 样式设置为适当的大小 例如 content h1 font size 22px left nav h1 font size 14px content r
  • 如何使用 JPA - EntityGraph 仅加载实体 @Basic 属性的子集?

    我找到了这个文档 https docs oracle com javaee 7 tutorial persistence entitygraphs htm关于实体图 读完之后 它给了我一个想法 您可以使用实体图来仅检索实体的子集 Basic
  • Android Studio 中的 Firebase android jars 文档/javadoc [重复]

    这个问题在这里已经有答案了 我正在尝试在 Android studio 上查看适用于 Android 的 Firebase Javadoc API 我在互联网上找到了javadoc 例如 数据库参考 https firebase googl
  • 如何在 Azure 中启用 PUT 请求?

    我正在 Azure 上构建 REST API 但是当我尝试通过 PUT 方法访问端点时 我得到了HTTP 405 Method Not Allowed 状态以及 IIS 错误消息 由于无效 您要查找的页面无法显示 正在使用方法 HTTP 动
  • 促使 TestFlight/iTunes Connect 发布新的测试版

    我正在使用 iTunes Connect 中的新测试版功能 我将一个版本 98 上传到 iTunes Connect 设置了一些内部测试人员 然后他们下载了该版本 现在 我已经使用新版本 build 99 更新了构建 并且该版本已上传到 i
  • logcat 停止写入设备上的文件

    对于 Android 应用程序 我将日志保存在设备本身上 以便在出现问题时我们可以找出问题所在 该设备在无互联网环境中运行 因此无法远程写入日志 下面的代码首先清除缓冲区 然后连续将记录的内容写入 logFile try Process p
  • 如何减小超过 600 MB 的 Electron 封装大小

    我发现这是因为节点模块和应用程序打包了一些不需要的东西来运行 当前文件大小为 600 mb 但我希望它小于 200 mb 我怀疑 no prune 填充了构建的包中的所有节点模块 但我只需要指定构建的包中的节点模块 我尝试删除 packag
  • 可绘制的 getResources().getIdentifier 问题

    这是我第一次来这里 我发现这个网站非常有用 我是 android 新手 我需要找出为什么我无法在列表视图中动态加载图像 我有三个字符串数组 private String lv arr News Events Other private St
  • cs107 makefile::找不到-lrssnews

    我想开始从事在线斯坦福 CS107 编程范式课程的第四个作业 即 RSS 搜索器 然而 我在第一步就落后了 我无法编译准备好的 待处理的 未完成的程序 当我输入 make 时出现此错误 gcc rss news search o g Wal
  • 在生产和版本控制同步问题中运行 Strapi

    我想知道在生产中运行 Strapi 的最佳实践是什么 我注意到 当添加内容类型时 Strapi 会生成新文件 这意味着生产环境的文件将与版本控制不同步 有推荐的部署流程吗 在管理中进行更改后 我是否应该将生产中的更改提交到我的 git 存储
  • UICollectionViewCell systemLayoutSizeFittingSize 返回不正确的宽度

    我一直在玩弄动态 UICollectionViewCell 并注意到在 iOS 8 上调用cell contentView systemLayoutSizeFittingSize UILayoutFittingCompressedSize
  • 在某些版本的 Oracle 中,相关子查询是否有嵌套限制?

    这是可以帮助您理解我的问题的代码 create table con content id number create table mat material id number content id number resolution num