为什么此查询会导致 Oracle 中的合并笛卡尔连接

2023-12-03

我最近有一个查询需要修改。

这是原文

SELECT RTRIM (position) AS "POSITION",
   .  // Other fields
   .
   .
   FROM schema.table x WHERE hours > 0 
    AND pay = 'RGW'
    AND NOT EXISTS( SELECT position FROM schema.table2 y where  y.position = x.position )

这是新版本

SELECT RTRIM (position) AS "POSITION",
   .  // Other fields
   .
   .
   FROM schema.table x WHERE hours > 0 
    AND pay = 'RGW'
    AND NOT EXISTS( SELECT position FROM  schema.table2 y where y.date = get_fiscal_year_start_date (SYSDATE) AND y.position = x.position )

The UDF get_fiscal_year_start_date()返回日期参数的会计年度开始日期。第一个查询运行良好,但第二个查询创建了合并笛卡尔连接。我查看了表上的索引,发现位置和日期都被索引了。我在 stackoverflow 上问你的问题是为什么要添加y.date = get_fiscal_year_start_date (SYSDATE)在 Oracle 10g 中导致合并笛卡尔连接。


问题是 Oracle 不知道get_fiscal_year_start_date (SYSDATE)返回一个结果。因此假设它将生成大量行。

显然我手头没有测试工具,但是这个版本的查询应该消除合并笛卡尔连接。

SELECT RTRIM (position) AS "POSITION", 
.  // Other fields 
. 
. 
FROM schema.table x 
     , ( select get_fiscal_year_start_date (SYSDATE) as fiscal_year 
         from dual ) fy
WHERE hours > 0  
AND pay = 'RGW' 
AND NOT EXISTS( SELECT position 
                FROM  schema.table2 y 
                where y.date = fy.fiscal_year
                AND y.position = x.position ) 

Oracle 知道 DUAL 有一行,因此子查询将返回一个值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么此查询会导致 Oracle 中的合并笛卡尔连接 的相关文章

  • 如何将 SQL 查询结果导出为 csv 样式格式的字符串,然后将其保存到 Oracle 中的 clob 中?

    我有以下问题 我有一个表 Source Data 实际上 有很多不同的源表 我需要将其中的一些数据导出到 Result Table 中 对于每个源表 我都有一些返回数据的 sql 并且需要将其转换为类似 csv 的字符串 例如 Source
  • 无法使用symfony2连接数据库oracle

    我需要的 我需要将oracle数据库与symfony2连接 我已经通过 php m 检查过 oci8 pdo odbc odbc 这是我关注的链接https gist github com johnkary 6481664 https gi
  • 如何在oracle sql查询中提取括号之间的字符串

    我正在尝试从字符串中提取括号之间的值 我怎样才能做到这一点 例如 我有这个字符串 Gupta Abha 01792 我想得到括号之间的结果 即 01792 我正在尝试编写这样的查询 select substr Gupta Abha 0179
  • 为什么这个触发器会失败?它说无效标识符

    CREATE MATERIALIZED VIEW ORDERS MV BUILD IMMEDIATE REFRESH COMPLETE ON DEMAND AS SELECT FROM ORDERS CREATE OR REPLACE TR
  • 计算Oracle中逗号分隔字符串中的元素数量

    假设我有一张桌子Col2是 varchar Col1 Col2 1 001 002 2 003 004 005 我需要计算 Col2 中的元素数量 并返回它 如果我这样做的话 select do something here with co
  • 通过 OCI 调用 Oracle 存储过程并使用 C++ 中的 out ref 游标返回结果

    我想使用 OCI 接口从 C 调用 Oracle 存储过程 并使用 out SYS REF CURSOR 作为过程的参数来迭代结果 我是 OCI 新手 所以可能会遗漏一些简单的东西 大部分代码取自这里 我的存储过程是 CREATE OR R
  • 如何使用 oracle SQL 执行线性插值?

    我正在尝试使用 Oracle 11g 开发中为 11 1 生产中为 11 2 进行数值分析 特别是对具有三列感兴趣的表进行线性插值 时间戳 deviceid 和值 值列保存来自设备 具有 ID deviceid 的数据 这些数据是在时间戳中
  • oracle查找两个表之间的差异

    我有两个结构相同的表 一个是临时的 另一个是产品的 每次都会加载整个数据集 有时该数据集会从先前的数据集中删除记录 我首先将数据集加载到临时表中 如果删除了任何记录 我也想从产品表中删除它们 那么如何找到prod中存在但temp中不存在的记
  • 表与视图的性能

    最近开始使用一个数据库 其中的惯例是为每个表创建一个视图 如果您假设表和视图之间存在一对一的映射 我想知道是否有人可以告诉我这样做对性能的影响 顺便说一句 这是在 Oracle 上的 假设问题是关于非物化视图 实际上取决于视图所基于的查询以
  • 在 MVC3 应用程序中使用具有表单身份验证的 Oracle 数据库

    我编写了一个简单的 MVC3 应用程序 并遵循了有关如何设置经过身份验证的用户的教程 本教程使用 SQL Server Express 数据库 是否可以使用 Oracle 数据库代替 SQL Server 这只是更改 web config
  • 关于pl/sql存储程序文本的问题

    我使用 TOAD 进行 PL SQL 开发 在 TOAD 中 当我输入过程名称并按 f4 时 我可以看到该过程的源代码 我认为 TOAD 从 v sqltext 视图获取源代码 为了证实我的想法 我写了一个查询 select from v
  • 休眠可能会导致此“获取顺序错误”错误吗?

    我尝试使用 Hibernate Spring JPA 执行此查询 在 Oracle DB 中 Query value DELETE from MY TABLE where ID ID nativeQuery true void delete
  • Oracle 中的函数与过程

    Oracle 中函数和过程的主要区别是什么 如果我可以用函数完成所有事情 为什么我必须使用过程 如果我无法在sql语句中调用过程 好吧 我会编写一个函数来完成相同的工作 过程不返回值 好的 在任何 dml 操作后我将仅返回 sql rowc
  • Oracle ODP.net 托管驱动程序与非托管驱动程序

    托管和非托管 Oracle ODP Net 驱动程序之间是否存在任何性能基准 即 除了架构 部署简单性之外 迁移到托管驱动程序是否有任何优势 我想分享一些结果 我认为与部署的简便性相比 性能上的小缺陷是值得的 Note seg意味着秒 对于
  • 将 OraclePreparedStatement 与 DBCP 连接结合使用

    我正在尝试使用 dbcp 框架为我的 oracle 服务器创建一个连接池 我用过这个tutorial http web archive org web 20120615100115 http www freshblurbs com 80 j
  • 替换 Oracle 包的一部分

    我需要修改包内的一个过程 我需要接触声明和实施 由于我正在维护每次修改的补丁文件 因此我希望更改最小化 我可以仅使用更改的过程更新包 如果是 如何更新 还是需要提供完整的包定义和实现 您需要替换整个包规范和主体 您不能仅对包的一部分进行操作
  • T-SQL:如何使用 SELECT 创建表?

    在 oracle 中 您可以发出 create table foo as select from bar 等效的 T SQL 语句是什么 您可以使用SELECT INTO http msdn microsoft com en us libr
  • 通过 Oracle 的数据库链接运行 SQL Server 存储过程

    参考如何通过数据库链接执行 Oracle 存储过程 https stackoverflow com questions 240788 how to execute an oracle stored procedure via a datab
  • 对 PLSQL 中的每个表执行

    我想要所有表中匹配特定名称条件的记录数 这是我构建的 SQL Declare SQLStatement VARCHAR 8000 BEGIN SELECT SELECT COUNT FROM Table Name INTO SQLState
  • Delphi 5 中的 Oracle 数据库连接

    我正在使用 Delphi 5 版本 我想连接到 Oracle 数据库 我有 TDatabase 组件 我不知道如何通过 Delphi 连接到数据库 请提供连接数据库的步骤 谢谢 The TDatabase http docwiki emba

随机推荐

  • ExecuteReader CommandText 属性尚未正确初始化

    首先 如果某些代码不正确 我们深表歉意 我对在 vb net 上使用 sql 还很陌生 我有以下代码 Imports MySql Data MySqlClient Imports System Data SqlClient Public C
  • 引导加载程序如何读取 DVD(cd)?

    我有一个用汇编语言编写的第一阶段引导加载程序 我需要它从 DVD 或 CD 加载第二阶段引导加载程序 我只找到了从软盘或硬盘读取的示例 那里使用的中断是13h 在中断描述中它说它可以读取软盘和硬盘 我尝试使用 13h 来读取 CD 就好像它
  • SAS 宏 if then 条件将变量与数值进行比较

    我有一个包含多条路径的数据集 最后一个变量是人们遵循该路径的频率 data path input path1 path2 path3 path4 path5 path6 frequency cards 2 5 3 6 7 2 465 4 3
  • 在 woocommerce 购物车和结帐上显示重量和剩余重量消息

    我需要在 Wordpress 的购物车和结帐页面中向客户显示一条消息 此消息应显示购物车中产品的重量 并告诉他们剩余的重量需要支付相同的运费 以便他们可以花费相同的运费购买其他产品 有专门的插件吗 谢谢 以下代码将在购物车和结账页面中显示自
  • sqlite中的外键定义

    无法在 sqlite 中添加外键约束 从 SQLite 3 6 19 开始 SQLite 支持外键 您需要通过以下方式启用它们 sqlite gt PRAGMAforeign keys ON 为了向后兼容 它们默认处于关闭状态 See th
  • 设置 JTable 中列的数据类型

    我创建了一个带有表模型的 JTable 现在 根据我所拥有的输入 我想将一列设置为特定的数据类型 我该怎么做呢 import java awt GridLayout import javax swing import javax swing
  • PHP - “print/echo”显示结束标签 - 或不输出

    启动一些 PHP 并对 echo print 的工作方式感到困惑 我的代码中有这个代码index html 我的页面上的输出是 Hello World gt 如果我删除 div 标签 我没有得到任何输出 使用echo产生相同的行为 这是怎么
  • 如何将网页不可用页面替换为自定义页面? (网页浏览)

    我想更改页面Webpage not Available or ERR NAME NOT RESOLVED to 我的页面 没有互联网连接 如果再次在线或连接互联网 则可以使用刷新按钮返回在线状态 如果未连接 则留在页面中没有网络连接 看起来
  • 如何循环遍历特定表单的所有打开实例?

    我需要更新动态创建的 Form2 的列表框 假设我必须更新此 ListBox 当然在 Form1 中 我没有此 Form2 的引用 因此我无法调用 UpdateList 方法 不 我不能将其设为静态 我什至不知道有没有打开Form2 可能有
  • 将元素插入数组C

    我有一个之前已经排序过的数字数组 所以不需要对其进行排序 我需要插入一个给定的值 将其命名val 位于我的数组中的有效位置 我的程序适用于小于上一个值的给定值 但对于该值大于上一个值的情况 我的程序只是不想插入该值 例如 对于数组 1 2
  • Oracle 动态 sql 与触发器使用:新和:旧变量

    我正在尝试使用 all tab columns 将大型触发器代码简化为简洁的代码 因为表包含 200 列 由于某种原因 当尝试使用动态 sql 时 它不允许我更新声明的变量 DECLARE v new rec SOME TABLE ROWT
  • GridView行重叠:如何使行高适合最高的项目?

    Like 前一个人 我在 GridView 项目之间有不需要的重叠 注意除了最右边的一列之外的每一列中的文本 我与上一个问题的不同之处在于我不想要恒定的行高 我希望行高变化为容纳最高的内容在每一行中 以有效利用屏幕空间 看着GridView
  • ##[警告]未找到 Visual Studio 版本“14.0”。回退到版本“15.0”

    我的项目需要使用 MSbuild 14 0 visual studio 2015 运行 但这仅需要 Visual Studio 2017 Community MSBuild 15 0 Bin msbuild exe I have insta
  • 显示 Google 图表中没有值的日期

    我有下面的脚本并且它运行完美 不过 也有可能有些日子没有订单 在这种情况下 日期仍应显示 但值应为零 就像上面一样 它从 06 19 跳转到 06 21 有没有办法仍然显示 06 20 并且将值设置为零 数据库中不存在缺失的日期 因为只有在
  • UWP 单元测试编译错误

    我正在将 WPF 项目迁移到 UWP 在 UWP 中设置新的单元测试项目时 当新的单元测试针对已迁移的项目 而该项目又依赖于解决方案中的另一个项目时 我会遇到错误 每个解决方案构建时都不会出现错误 Solution Explorer Com
  • 空 Div 导致非常奇怪的行为

    有这样的东西 div class something div div p Some text here p div 这全部在 XSL 模板中调用 由于某种原因 当它呈现时 我发现空的 div 永远不会关闭 这 p 它的内容在这个 div 内
  • 同时从麦克风录制音频并在Python中播放效果

    我的目标是通过笔记本电脑麦克风录制我的声音 并同时在 python 中添加效果 我需要的是类似于音乐效果踏板 您可以在其中连接吉他或麦克风 并添加混响 回声或失真等 我正在使用 pyaudio 和 wave 来录制和播放音频 使用 scik
  • 如何修复 Eclipse Java 虚拟机启动器错误?

    就像标题所说 我遇到了 eclipse JVM 启动器的问题 昨晚 一切正常 据我所知 从那时起我的电脑上没有任何变化 然而 今天早上我醒来发现 当我在 Eclipse 中运行任何项目时 我收到了这个错误 Java Virtual Mach
  • Android 删除本地化

    我在 Play 商店中的应用程序没有除默认版本之外的任何本地化版本 美国英语 这次我创建了一个新的apk来更新它 它使用android support v7 appcompat图书馆 因此 当我上传新的 apk 并在 apk 详细信息中显示
  • 为什么此查询会导致 Oracle 中的合并笛卡尔连接

    我最近有一个查询需要修改 这是原文 SELECT RTRIM position AS POSITION Other fields FROM schema table x WHERE hours gt 0 AND pay RGW AND NO