在某些版本的 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 中,相关子查询是否有嵌套限制? 的相关文章

  • 如何在sqlite中创建物化视图?

    我对物化视图和 SQLite 进行了无数次搜索 据我所知 2004 年和 2006 年似乎有人提到 SQLite 没有物化视图 紧随其后的是 SQLite 的变更日志2008年3月 http www sqlite org releaselo
  • 使用按位函数查询 BIT 字段时,MySQL 不使用索引

    我的 MySQL 表中有一个 BIT 类型的字段 我想使用位值存储记录的状态 例如 1 status1 2 status2 4 status3 8 status4 每条记录可以同时具有多种状态 对于 status1 和 status3 该值
  • 如何查找 PostgreSQL 数据库的上次更新时间?

    我正在使用一个批量更新的 postgreSQL 数据库 我需要知道数据库 或数据库中的表 上次更新或修改的时间 两者都可以 我看到 postgreSQL 论坛上有人建议使用日志记录并查询日志 这对我不起作用 因为我无法控制客户端代码库 你可
  • Oracle 中的 SQL 调优 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何文章 链接可以让我找到 SQL 调优 Oracle 的示例 如果能用例子来解释那就太好了 我需
  • 对于数据库来说,选择正确的数据类型会影响性能吗?

    如果是这样 为什么 我的意思是 tinyint 的搜索速度比 int 快吗 如果是这样 性能上的实际差异是什么 是的 根据数据类型 它确实有所不同 int vs tinyint不会在速度上产生明显的差异 但会在数据大小上产生差异 假设tin
  • 如何有效地从 DB2 表中删除所有行

    我有一个大约有 50 万行的表 我想删除所有行 如果我做简单的delete from tbl 事务日志已满 我不关心这种情况下的事务 无论如何我都不想回滚 我可以删除许多事务中的行 但是有更好的方法吗 如何有效地从 DB2 中的表中删除所有
  • SPARK SQL - 当时的情况

    我是 SPARK SQL 的新手 SPARK SQL 中是否有相当于 CASE WHEN CONDITION THEN 0 ELSE 1 END 的内容 select case when 1 1 then 1 else 0 end from
  • java mysql 准备好的语句

    我正在尝试使用 java 向数据库中进行简单的插入 它告诉我我的 sql 语法已关闭 但是 当我复制打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令中时 它会正确执行该命令 并且我似乎无法弄清楚 java 中的字符串查询
  • 连接两个表的查询的 SQL Server“FOR XML”输出

    我是 SQL Server 中 FOR XML 功能的新手 我正在使用 SQL Server 2012 我有两个表 Word 和 Word Expansion 样本数据 表 字 WordOID Word 1 PIPE 2 WIRE 表 Wo
  • 如何使用 MySQL 的 LOAD DATA LOCAL INFILE 在导入 CSV 时将字符串日期更改为 MySQL 日期格式

    我正在使用 MySQL 的 LOAD DATA LOCAL INFILE SQL 语句将数据从 CSV 文件加载到现有数据库表中 下面是一个 SQL 语句示例 LOAD DATA LOCAL INFILE file csv INTO TAB
  • SQLite HAVING 比较错误

    我有一个测试 SQLite 表 用于存储带有值的报告数据 CREATE TABLE IF NOT EXISTS test fact daily revenue date TEXT revenue NUMERIC product TEXT I
  • 复选框上的数据绑定

    我目前正在将数据从 SQL 数据库之一提取到我的应用程序中 我可以让它适用于我的文本框和其他项目 但是 我似乎无法让它适用于复选框 这是我正在使用的代码 DataTable dt new DataTable dt using SqlConn
  • 为什么这会返回资源 id #2? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • 拆分列中的字符串并在列中添加值

    我有一个包含几行数据的表 如下所示 16 W 2 Work ALBO 00 Proposal ALxO Amendement 1 20091022 signed pdf 17 W 2 Work ALBO 00 Proposal Level1
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • Oracle - 使用 DBMS_MVIEW.REFRESH 刷新“REFRESH FORCE ON DEMAND”视图时会发生什么

    我有以下物化视图 CREATE MATERIALIZED VIEW TESTRESULT ON PREBUILT TABLE WITH REDUCED PRECISION REFRESH FORCE ON DEMAND WITH PRIMA
  • sql server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679
  • 是否有适用于所有数据库的标准sql

    如下所示 不同数据库的语法有所不同 是否存在适用于所有数据库的标准方法 有没有什么工具可以将任意sql转换为任意sql SQL Server 2005 CREATE TABLE Table01 Field01 int primary key
  • 了解 SSMS 2008 中关系的更新和删除规则

    当我们定义外键约束时 我对 SQL Server 2008 Management Studio 中的更新和删除规则的含义感到困惑 我也没有找到相关的帮助文档 例如F1帮助 这是屏幕快照 如果有人能描述它们的含义并推荐一些相关文档来阅读 我将
  • 如何从 PostgreSQL 中的时间戳列值提取一天中的时间(或小时)?

    我正在尝试从 PostgreSQL 中的 时间戳 列中提取一天中的时间 这是我的做法 但是 太糟糕了 知道如何做得更好吗 SELECT date part hour date demande text hours date part min

随机推荐

  • 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