暂无图片
子查询进行内连接查询不一致问题
我来答
分享
John小邢
2020-08-10
子查询进行内连接查询不一致问题
暂无图片 20M

发生版本:
01.png

1)原始sql:
SELECT B.FROM_SYS_ID, B.SYNC_TX_DATE, B.JOUR_NO
FROM (SELECT FROM_SYS_ID, MAX(SYNC_TX_DATE) SYNC_TX_DATE
FROM TT_SYNC_JOUR_DEAL_LOG
GROUP BY FROM_SYS_ID) A,
(SELECT FROM_SYS_ID, SYNC_TX_DATE, MAX(JOUR_NO) JOUR_NO
FROM TT_SYNC_JOUR_DEAL_LOG
GROUP BY FROM_SYS_ID, SYNC_TX_DATE) B
WHERE A.FROM_SYS_ID = B.FROM_SYS_ID
AND A.SYNC_TX_DATE = B.SYNC_TX_DATE;
结果:
image.png

2)改写sql41:
SELECT B.FROM_SYS_ID, B.SYNC_TX_DATE, B.JOUR_NO_01
FROM (SELECT FROM_SYS_ID, MAX(SYNC_TX_DATE) SYNC_TX_DATE_01
FROM TT_SYNC_JOUR_DEAL_LOG
GROUP BY FROM_SYS_ID) A,
(SELECT FROM_SYS_ID, SYNC_TX_DATE, MAX(JOUR_NO) JOUR_NO_01
FROM TT_SYNC_JOUR_DEAL_LOG
GROUP BY FROM_SYS_ID, SYNC_TX_DATE) B
WHERE A.FROM_SYS_ID = B.FROM_SYS_ID
AND A.SYNC_TX_DATE_01 = B.SYNC_TX_DATE;
结果:
image.png

3)改写sql45:
WITH A AS
(SELECT /materialize/ FROM_SYS_ID, MAX(SYNC_TX_DATE) SYNC_TX_DATE
FROM TT_SYNC_JOUR_DEAL_LOG
GROUP BY FROM_SYS_ID),
B AS
(SELECT /materialize/ FROM_SYS_ID, SYNC_TX_DATE, MAX(JOUR_NO) JOUR_NO
FROM TT_SYNC_JOUR_DEAL_LOG
GROUP BY FROM_SYS_ID, SYNC_TX_DATE)
SELECT B.FROM_SYS_ID, B.SYNC_TX_DATE, B.JOUR_NO
FROM A, B
WHERE A.FROM_SYS_ID = B.FROM_SYS_ID
AND A.SYNC_TX_DATE = B.SYNC_TX_DATE;
结果:
image.png

4)改写sql46:
"SELECT b.FROM_sys_id,b.sync_tx_date,b.jour_no FROM "
"(SELECT FROM_sys_id,max(sync_tx_date) sync_tx_date_01 FROM TT_SYNC_JOUR_DEAL_LOG GROUP BY FROM_sys_id) a, "
"(SELECT FROM_sys_id,sync_tx_date,max(jour_no) jour_no FROM TT_SYNC_JOUR_DEAL_LOG GROUP BY FROM_sys_id,sync_tx_date) b "
“WHERE a.FROM_sys_id=b.FROM_sys_id AND a.sync_tx_date_01=b.sync_tx_date”;
image.png

5)改写sql47:
"SELECT b.FROM_sys_id,b.sync_tx_date,b.jour_no_01 FROM "
"(SELECT FROM_sys_id,max(sync_tx_date) sync_tx_date FROM TT_SYNC_JOUR_DEAL_LOG GROUP BY FROM_sys_id) a, "
"(SELECT FROM_sys_id,sync_tx_date,max(jour_no) jour_no_01 FROM TT_SYNC_JOUR_DEAL_LOG GROUP BY FROM_sys_id,sync_tx_date) b "
“WHERE a.FROM_sys_id=b.FROM_sys_id AND a.sync_tx_date=b.sync_tx_date”;
image.png

6)改写sql48:
"SELECT t2.FROM_sys_id,t2.sync_tx_date,t2.jour_no FROM "
"(SELECT FROM_sys_id,max(sync_tx_date) sync_tx_date FROM TT_SYNC_JOUR_DEAL_LOG GROUP BY FROM_sys_id) t1, "
"(SELECT FROM_sys_id,sync_tx_date,max(jour_no) jour_no FROM TT_SYNC_JOUR_DEAL_LOG GROUP BY FROM_sys_id,sync_tx_date) t2 "
“WHERE t1.FROM_sys_id=t2.FROM_sys_id AND t1.sync_tx_date = t2.sync_tx_date”;
image.png
涉及的表TT_SYNC_JOUR_DEAL_LOG DDL语句如下:
image.png

恳请大神帮忙知道,该如何排除这个查询问题出在哪里了。
不胜感激。

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
John小邢

确切的问题是,我们原始的sql为啥查出一个不符合预期的结果,使用原始的sql在plsql developer以及sqlplus都能查询出正确的结果,不知道哪里出了问题,使用我们的程序改写的sql也是ok的。

暂无图片 评论
暂无图片 有用 0
打赏 0
行者

没明白你的问题究竟在哪里,从SQL上同一张表被访问两次,这个SQL还有可能继续优化

暂无图片 评论
暂无图片 有用 0
打赏 0
John小邢

谢谢你的回复,这个sql是有很多问题,后面,我们优化这个查询。
同样是这个sql,我用别人给我的几个隐含参数去掉谓词优化,后面就可以查询出来了。

暂无图片 评论
暂无图片 有用 0
打赏 0

没有明白 你有什么问题?你想做什么?

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
Oracle 11.2.0.4云上环境,plsql链接几个小时后,再次执行sql语句的时候,报错ora 03113, 重新登录就可以
回答 2
可以抓包看看,可以配置DCD防止防火墙把长连接断开
刚才发现,备份又失败了,天天这个时候手机备份,真有够了
回答 1
已采纳
手机还是收集?。。。备份需要稳定的网络连接。请确保您的手机连接到可靠的网络,并尽量避免在备份过程中切换网络或连接不稳定的网络
将oracle数据库安装在电脑上,但数据放在移动硬盘里,这样操作可以吗?
回答 4
已采纳
您好:如楼上所说,注意安全关库、配置好盘符是可以行的通,和使用本地盘一样的。但除了可行性问题外,希望题主继续看一下我下面的疑问和建议。技术问题外,主要想和题主确认下这种操作是否安全?这个数据是测试数据
win2019 server安装Oracle19c,双击setup后一直停在这里不动?
回答 5
谢谢各位大神,已经解决了,客户才装的操作系统,做了很多安全策略,他也不记得整了些啥了,重装操作系统后就正常了。
SUSE15安装oracle21c,报错Error in invoking target……
回答 3
compatlibpthreadnonshared包到哪里可以下载?
铁子们,rac集群上的归档是在共享存储上是吧?只有一份对吗?不能每个实例上都有吧?
回答 5
每个实例都会产生,是不一样的,放哪里自己决定
Oracle 集群inventory.xml 这个文件不小心删掉了,请问怎么恢复?
回答 2
已采纳
再拷贝一个修改一下!给你一个11204RAC参考一下:[root@cqdb1:/u01/app/oraInventory/ContentsXML]$catinventory.xml<?xmlve
Oracle的标准审计有FGA审计在企业中的使用案例
回答 1
我建议您使用第三方的数据库审计。旁路审计,对数据库没什么压力。数据库自己的审计要消耗自己的资源的。
dgbroker 修改归档路径
回答 1
应该是配置问题,建议按照文档重新配置一份。https://oraclebase.com/articles/11g/dataguardsetupusingbroker11gr2关于standbyarch
ogg问题-OGG-01963
回答 1
ogg命令行下执行一下dblogin登录一下数据库试试。怀疑你配置没有配对。