暂无图片
子查询进行内连接查询不一致问题
我来答
分享
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
行者

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

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

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

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

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

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏