首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >具有多个计数的PL/SQL SELECT (不同xxx) -意外结果

具有多个计数的PL/SQL SELECT (不同xxx) -意外结果
EN

Stack Overflow用户
提问于 2011-06-07 22:01:43
回答 2查看 8.3K关注 0票数 4

我试图为Oracle 11g应用程序编写一个查询,但遇到了一个问题。

我将简化真实场景,以便更容易理解(并保护客户端的数据):

  • 表A是基表。它有一个已知的标识符,我传递给查询。表A中的每个条目可能有多个
  • 表B中可能有多个条目。表B中的表B包含我感兴趣的值。表B中的每个条目可能有多个条目,表C中也有表C中的多个条目。表C包含我感兴趣的另一个值。
  • 也有一个XML片段,其中包含的值列表可能与表C中感兴趣的值相匹配,也可能与表C中的感兴趣的值不匹配。
  • 查询与XML的外部连接。因此,如果有匹配的值,它将再次返回该值,否则为空.

我想要做的是取回我传入的标识符,B和C中唯一值的计数,以及联接的XML部分中唯一(和非空)值的计数。

我目前的查询是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT
    a.ID
  , COUNT(DISTINCT b.VAL) AS B_VAL
  , COUNT(DISTINCT c.VAL) AS C_VAL
  , COUNT(DISTINCT xml.VAL) AS XML_VAL
FROM a, b, c,
  XMLTABLE('/field1/collection/value' passing my_xml_type
    COLUMNS VAL VARCHAR2(50) PATH '.') xml
WHERE
      a.ID = b.SOME_ID
  AND b.OTHER_ID = c.OTHER_ID
  AND c.VAL = xml.VAL (+)

现在,如果您忘记了计数,只返回行,则示例结果集可能如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ID     B_VAL     C_VAL     XML_VAL
---------------------------------------
X      abc       123       123
X      abc       456       null
X      abc       789       789
X      abc       789       789

it:现在当我想要做不同的计数时,我希望它返回:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ID     B_VAL     C_VAL     XML_VAL
---------------------------------------
X      1         3         2

what :然而,当我将它们全部作为计数时,这就是我所得到的(不同的.):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ID     B_VAL     C_VAL     XML_VAL
---------------------------------------
X      1         1         1

如果我从计数中取出不同的内容,ALTERNATIVE: ...and就会得到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ID     B_VAL     C_VAL     XML_VAL
---------------------------------------
X      1         4         3

为什么不同的东西似乎只在一个特定的B_VAL中运行,但是去掉它会导致它跨所有行操作,而没有考虑到唯一性?

还有另一种不需要将所有连接作为子查询进行复制的方法吗?我是否完全忽略了这一点?

(请注意,我根本不是DB开发人员,我只是被拉过来帮忙,所以很抱歉这是个简单的问题.不过,我已经搜索过谷歌并浏览了这个网站的答案,然后才发帖!)

谢谢。

我已经发现,如果我把XML表连接出来,那么计数不同在B_VAL和C_VAL之间可以正常工作.所以,也许Oracle处理XML表联接的方式有些奇怪吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-08 02:12:27

正如文森特的测试用例在10.2.0.3和11.2.0.2中工作一样,如果您在早期版本的11g中,这可能是bug 8816675: XMLexists查询返回错误的结果和选择不同。bug中的示例是指count(distinct)的一个问题。您没有显式地使用XMLexists,但是这个bug可能会产生比标题建议的更广泛的影响,或者它可能会在引擎盖下面使用。

如果这是问题所在,而且您无法修补,您可能可以通过包装不计数版本来解决这个问题,而这个版本仍然不太漂亮:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT
    A_ID
    , COUNT(DISTINCT B_VAL) AS B_VAL
    , COUNT(DISTINCT C_VAL) AS C_VAL
    , COUNT(DISTINCT XML_VAL) AS XML_VAL
FROM (
SELECT a.ID as A_ID, b.VAL as B_VAL, c.VAL as C_VAL, xml.VAL as XML_VAL
FROM a, b, c
    , XMLTABLE('/field1/collection/value' passing my_xml_type
        COLUMNS VAL VARCHAR2(50) PATH '.') xml
WHERE a.ID = b.SOME_ID
AND b.OTHER_ID = c.OTHER_ID
AND c.VAL = xml.VAL (+)
)
GROUP BY A_ID;
票数 4
EN

Stack Overflow用户

发布于 2011-06-08 01:06:55

我无法用Oracle 10.2.0.3复制您的发现。

这是我的装置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> CREATE TABLE a AS SELECT 'X' ID FROM dual;

Table created

SQL> CREATE TABLE b AS SELECT 'abc' val, 'X' some_id, 1 other_id FROM dual;

Table created

SQL> CREATE TABLE c AS
  2     SELECT 1 other_id, '123' val,
  3            XMLTYPE('<field1>
  4                        <collection><value>123</value></collection>
  5                     </field1>') my_xml_type
  6       FROM dual UNION ALL
  7     SELECT 1 other_id, '456' val, NULL FROM dual UNION ALL
  8     SELECT 1 other_id, '789' val,
  9            XMLTYPE('<field1>
 10                        <collection><value>789</value></collection>
 11                        <collection><value>789</value></collection>
 12                     </field1>') my_xml_type
 13       FROM dual;

Table created

查询返回正确的结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> SELECT
  2      a.ID
  3    , COUNT(DISTINCT b.VAL) AS B_VAL
  4    , COUNT(DISTINCT c.VAL) AS C_VAL
  5    , COUNT(DISTINCT xml.VAL) AS XML_VAL
  6  FROM a, b, c
  7     , XMLTABLE('/field1/collection/value' passing my_xml_type
  8                 COLUMNS VAL VARCHAR2(50) PATH '.') xml
  9  WHERE a.ID = b.SOME_ID
 10    AND b.OTHER_ID = c.OTHER_ID
 11    AND c.VAL = xml.VAL (+)
 12  GROUP BY a.id;

ID      B_VAL      C_VAL    XML_VAL
-- ---------- ---------- ----------
X           1          3          2

你能运行这个测试用例吗?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6274773

复制
相关文章
Outlook 2010 提示禁止访问下列
outlook2007收到一封邮件带有附件,但是却无法查看和下载,提示:禁止访问下列具有潜在不安全因素的附件。如何解决呢。
阳光岛主
2019/02/19
1K0
Outlook 2010 提示禁止访问下列
为什么破坏双亲委派机制?
双亲委派机制是Java类加载器的一种基础架构,它的作用是保证Java中类的安全性和稳定性。在Java中,类加载器主要分为三种:Bootstrap ClassLoader、Extension ClassLoader和Application ClassLoader。其中,Bootstrap ClassLoader是最顶层的类加载器,Extension ClassLoader和Application ClassLoader都是由它衍生而来。在双亲委派机制下,当一个类需要被加载时,会先被Application ClassLoader加载,如果Application ClassLoader发现该类还没有被加载,则会将加载请求委派给Extension ClassLoader;Extension ClassLoader如果也没有加载过该类,再将委派请求传递给Bootstrap ClassLoader进行加载。如果Bootstrap ClassLoader成功加载了该类,就会沿着委托链返回,让Extension ClassLoader和Application ClassLoader逐一进行加载。双亲委派机制的优点是保证了类的唯一性,避免了重复加载。
疯狂的KK
2023/04/03
1K0
我的VS2010+VAssistX
最近越来越觉得VAssistX好用,可能是以前没有去仔细研究过吧,也可能是因为我是个快捷键控吧,不管怎样,用或不用,方便或不方便,它就是那里,一动也不动,进入正题,给大家介绍下我的使用配置:(我只是引玉,你可以抛砖)
bear_fish
2018/09/20
8310
Outlook 2019 for mac(电子邮件)v16.70 beta中文版
Outlook 2019是一款专业的电子邮件收发软件,outlook可以将您的电子邮件,日历和联系人集中在一起,提高工作效率,Outlook 2019拥有极强的兼容行,很多网站的邮箱都可以加入到其中,让您避免没有看到邮件的尴尬,为您的成功助一臂之力。
皮西歪
2023/01/04
1.4K0
Outlook 2019 for mac(电子邮件)v16.70 beta中文版
谷歌发现黑客新工具,可窃取Gmail、雅虎、Outlook等电子邮件账户
8月23日消息,谷歌威胁分析小组(TAG)发现,名为Charming Kitten的伊朗政府支持团体,在其恶意软件库中增加了一个新工具,可以从Gmail、雅虎和微软Outlook账户中检索用户数据。 谷歌将该工具称为HYPERSCRAPE,该工具在2021年12月首次被发现。据说伊朗用这个开发中的软件入侵了二十余个帐户,已知最早的样本可以追溯到2020年。 Charming Kitten是一个高度活跃的高级持续性威胁(APT),据信与伊朗的伊斯兰革命卫队(IRGC)有关,曾参与过与政府利益一致的间谍活动。
FB客服
2023/03/30
1.2K0
谷歌发现黑客新工具,可窃取Gmail、雅虎、Outlook等电子邮件账户
通过分析html格式确定网页主体内容的想法
    做Web编程有时候需要了解html文件的大小,组成等信息,为以后的各种处理做准备。比如通过crawler抓取网页对网页内容自动分类的时候,最好能提取网页中的主要信息,过滤掉页头,页角的非主体信息;还有比较2个网页内容相关性的时候也需要类似的技术。最简单的还有:分析一个网页中使用IFrame的个数,内外链接个数比例等都需要对Html文件格式做分析。
田春峰-JCJC错别字检测
2019/02/14
8820
office2010软件下载安装教程--office全版本软件安装包office软件哪个版本好用
在Microsoft Office中,可以使用Outlook应用程序进行邮件管理。
用户7442032
2023/03/14
3.9K0
office2010(Excel/word/PPT)软件--office办公全版本软件下载
在Microsoft Office中,可以使用Outlook应用程序进行联系人管理。
用户7442032
2023/03/14
2.1K0
2.HTML根部头部主体标签元素介绍
描述: HTML html 元素表示一个 HTML 文档的根(顶级元素),所以它也被称为根元素,所有其他元素必须是此元素的后代。
全栈工程师修炼指南
2023/03/19
1.2K0
2.HTML根部头部主体标签元素介绍
MICROSOFT EXCHANGE – 防止网络攻击
Microsoft Exchange 服务器是威胁参与者的常见目标,不仅因为它们提供了多个入口点,而且因为它们在绑定到 Active Directory 时提供了持久性和域升级的机会。通过 Exchange 连接破坏组织的域可能成为一项微不足道的任务,尤其是在缺少许多安全控制的情况下。
Khan安全团队
2022/01/12
4.2K0
盘点世界十大著名黑客攻击事件
相信很多像小编一样的80后,都听说过了蠕虫病毒,或者说熊猫烧香病毒,今天闲着没事,小编来跟大家盘点一下,世界典型大型黑客袭击事件。 一、勒索病毒事件 勒索病毒是一种源自美国国安局的一种计算机病毒。近百国中招,其中英国医疗系统陷入瘫痪、大量病人无法就医。中国的高校校内网也被感染。受害机器的磁盘文件会被加密,只有支付赎金才能解密恢复。勒索金额为是5个比特币,折合人民币分别为5万多元。据最新的报导称勒索病毒事件幕后黑客已收到8.2个比特币。 二、“CIH病毒”事件 说到CIH病毒
企鹅号小编
2018/01/23
24.8K1
盘点世界十大著名黑客攻击事件
outlook下载
Outlook是微软推出的邮件管理工具。Outlook 2021正式版是微软Office软件套件的组成部分之一,帮助用户快速收发电子邮件、记日记、管理联系人信息、安排日程、分配任务等。Outlook 2021免费版支持查看邮件,可以选择分布式方式查看保存的邮件列表。 outlook安装包下载
用户9693436
2022/04/23
4K0
攻击新姿势:通过入侵Outlook Web应用(OWA)服务器来破坏机构网络
研究人员发现了一种先进的恶意软件,它可以通过感染机构的Outlook Web应用(OWA)邮件服务器来破坏机构的网络。 机构网络新型攻击方式 根据Cybereason安全公司的专家们的消息,网络威胁者通过一个Web邮件服务器攻陷了一个不知名的机构网络,并对它进行了数个月的控制。受害者是一个总部在美国的中型公共服务公司,该公司联系了Cybereason公司以调查可能的入侵方式。Cybereason在受害者的19000个端点上部署其产品,以此识别攻击源头并减轻攻击的影响。 在调查过程中,Cybereason
FB客服
2018/02/06
2K0
攻击新姿势:通过入侵Outlook Web应用(OWA)服务器来破坏机构网络
Microsoft Outlook LTSC 2021 for Mac(outlook邮箱)
Microsoft Outlook LTSC 2021 for Mac中文版是一款邮件和日历管理应用程序。Microsoft office LTSC 2021 是套装中的一个组成部分,与Word、Excel和PowerPoint等其他应用程序一起提供。
皮西歪
2023/04/25
2.7K1
Microsoft Outlook LTSC 2021 for Mac(outlook邮箱)
我的HTML总结之HTML发展史
HTML是Web统一语言,这些容纳在尖括号里的简单标签,构成了如今的Web。 1991年,Tim Berners-Lee编写了一份叫做“HTML标签”的文档,里面包含了大约20个用来标记网页的HTML
柴小智
2018/04/10
9000
我的HTML总结之HTML发展史
微软Outlook for Android移动应用的XSS漏洞分析
今天分享的Writeup是关于Outlook for Andriod的存储型XSS漏洞,作者通过朋友发来的技术邮件偶然发现了该漏洞,历经长达几个月的复现构造,最终微软承认了该漏洞(CVE-2019-1105)。
FB客服
2019/07/22
1.4K0
微软Outlook for Android移动应用的XSS漏洞分析
Active APT
为 Word 和 Excel 文档添加了狡猾的远程模板注入器;独特的 Outlook 群发邮件宏
Khan安全团队
2022/01/17
8K0
微软证实,部分用户的Outlook账户被黑客入侵了数月之久
微软发现,在2019年1月1日至3月28日期间,其网络邮件服务支持代理的证书被泄露,可以未经授权直接访问一些账户。微软表示,黑客可能查看了这些账户的邮件地址、文件夹名称和邮件标题,但没有查看邮件内容和附件。
德顺
2019/11/13
1.1K0
微软证实,部分用户的Outlook账户被黑客入侵了数月之久
Chrome 92 破坏性功能,我这弹窗有何用?
近期,Chrome 92 进行了发布,我们来看看 Chrome 92 中提及的一个影响比较大的破坏性改动。
秋风的笔记
2021/08/27
6910
Chrome 92 破坏性功能,我这弹窗有何用?
针对exchange的攻击方式
在exchange 2010中,exchange包含五个服务器角色,分别为邮箱服务器,客户端访问服务器,集线传输服务器,统一消息服务器,边缘传输服务器。 在后来的exchange 2013中服务器被精简为3个:邮箱服务器,客户端访问服务器,边缘传输服务器 exchange 2016和2019中则只有 邮箱服务器和边缘传输服务器了。
ConsT27
2022/03/15
3.7K0
针对exchange的攻击方式

相似问题

为什么outlook 2010 html电子邮件中出现边框

11

Outlook 2010与Outlook 2013的电子邮件html模板

13

Outlook正在破坏我的电子邮件

10

Html电子邮件- Outlook 2010 -表格对齐问题

10

Outlook 2010表顶部的HTML电子邮件填充

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文