Oracle多表联查分页数据重复出现
2017-11-22 17:11
393 查看
一、问题描述
使用Oracle的分页语句进行分页,第一页,没问题,第二页出现重复数据:
第一页的数据:
SELECT *
FROM (
SELECT u.*, rownum AS r
FROM (
SELECT configs.VIDEOSERVICE, configs.VOICESERVICE, configs.IMAGESERVICE, doc.id AS docid, doc.name AS docname
, doc.begood, rice.graphicprice, rice.speechprice, rice.videoprice, chart.titleName
, hpath.FTPURL || doc.PHOTOID AS ftpurl, luate.score
FROM HEALTHDOCTOR doc
LEFT JOIN HealthServiceConfig configs ON doc.id = configs.docid
LEFT JOIN HEALTHPRICE rice ON doc.id = rice.docid
LEFT JOIN healthTitleChart chart ON doc.titlecode = chart.TITLECODE
LEFT JOIN HEALTHFTPPATH hpath ON doc.PATHCODE = hpath.PATHCODE
LEFT JOIN (
SELECT round(AVG(score), 1) AS score, docid
FROM healthevaluate
GROUP BY docid
) luate ON doc.id = luate.docid
LEFT JOIN (
SELECT COUNT(*) AS ordersum, docid
FROM HealthyOrder
GROUP BY docid
) orders ON doc.id = orders.docid
WHERE rice.GRAPHICPRICE >= 0
) u
WHERE rownum < 13
)
WHERE r >= 1
第二页的数据:
SELECT *
FROM (
SELECT u.*, rownum AS r
FROM (
SELECT configs.VIDEOSERVICE, configs.VOICESERVICE, configs.IMAGESERVICE, doc.id AS docid, doc.name AS docname
, doc.begood, rice.graphicprice, rice.speechprice, rice.videoprice, chart.titleName
, hpath.FTPURL || doc.PHOTOID AS ftpurl, luate.score
FROM HEALTHDOCTOR doc
LEFT JOIN HealthServiceConfig configs ON doc.id = configs.docid
LEFT JOIN HEALTHPRICE rice ON doc.id = rice.docid
LEFT JOIN healthTitleChart chart ON doc.titlecode = chart.TITLECODE
LEFT JOIN HEALTHFTPPATH hpath ON doc.PATHCODE = hpath.PATHCODE
LEFT JOIN (
SELECT round(AVG(score), 1) AS score, docid
FROM healthevaluate
GROUP BY docid
) luate ON doc.id = luate.docid
LEFT JOIN (
SELECT COUNT(*) AS ordersum, docid
FROM HealthyOrder
GROUP BY docid
) orders ON doc.id = orders.docid
WHERE rice.GRAPHICPRICE >= 0
) u
WHERE rownum < 25
)
WHERE r >= 13
第一页和第二页有数据重复了,排序有问题。
二、解决方法
在最外层加个"order by id"其中这个id是主键就行了:
使用Oracle的分页语句进行分页,第一页,没问题,第二页出现重复数据:
第一页的数据:
SELECT *
FROM (
SELECT u.*, rownum AS r
FROM (
SELECT configs.VIDEOSERVICE, configs.VOICESERVICE, configs.IMAGESERVICE, doc.id AS docid, doc.name AS docname
, doc.begood, rice.graphicprice, rice.speechprice, rice.videoprice, chart.titleName
, hpath.FTPURL || doc.PHOTOID AS ftpurl, luate.score
FROM HEALTHDOCTOR doc
LEFT JOIN HealthServiceConfig configs ON doc.id = configs.docid
LEFT JOIN HEALTHPRICE rice ON doc.id = rice.docid
LEFT JOIN healthTitleChart chart ON doc.titlecode = chart.TITLECODE
LEFT JOIN HEALTHFTPPATH hpath ON doc.PATHCODE = hpath.PATHCODE
LEFT JOIN (
SELECT round(AVG(score), 1) AS score, docid
FROM healthevaluate
GROUP BY docid
) luate ON doc.id = luate.docid
LEFT JOIN (
SELECT COUNT(*) AS ordersum, docid
FROM HealthyOrder
GROUP BY docid
) orders ON doc.id = orders.docid
WHERE rice.GRAPHICPRICE >= 0
) u
WHERE rownum < 13
)
WHERE r >= 1
第二页的数据:
SELECT *
FROM (
SELECT u.*, rownum AS r
FROM (
SELECT configs.VIDEOSERVICE, configs.VOICESERVICE, configs.IMAGESERVICE, doc.id AS docid, doc.name AS docname
, doc.begood, rice.graphicprice, rice.speechprice, rice.videoprice, chart.titleName
, hpath.FTPURL || doc.PHOTOID AS ftpurl, luate.score
FROM HEALTHDOCTOR doc
LEFT JOIN HealthServiceConfig configs ON doc.id = configs.docid
LEFT JOIN HEALTHPRICE rice ON doc.id = rice.docid
LEFT JOIN healthTitleChart chart ON doc.titlecode = chart.TITLECODE
LEFT JOIN HEALTHFTPPATH hpath ON doc.PATHCODE = hpath.PATHCODE
LEFT JOIN (
SELECT round(AVG(score), 1) AS score, docid
FROM healthevaluate
GROUP BY docid
) luate ON doc.id = luate.docid
LEFT JOIN (
SELECT COUNT(*) AS ordersum, docid
FROM HealthyOrder
GROUP BY docid
) orders ON doc.id = orders.docid
WHERE rice.GRAPHICPRICE >= 0
) u
WHERE rownum < 25
)
WHERE r >= 13
第一页和第二页有数据重复了,排序有问题。
二、解决方法
在最外层加个"order by id"其中这个id是主键就行了:
相关文章推荐
- oracle分页排序出现重复数据
- oracle rownum分页 出现重复数据
- oracle分页数据重复问题
- oracle分页查询数据重复问题、分页排序陷阱
- SQL分页排序的实现与分页数据重复问题——以Oracle rownum为例
- Oracle Entity6 在查询View的时候出现重复数据
- SQL分页排序的实现与分页数据重复问题——以Oracle rownum为例
- SQL分页排序的实现与分页数据重复问题——以Oracle rownum为例
- oracle排序,出现页数不同数据却重复问题的原因及解决办法
- Oracle查询重复记录,分页和去掉重复数据的查询语句
- oracle 分页 数据重复 数据不正确
- oracle分页查询数据重复问题的解决
- oracle 分页查询数据重复问题
- oracle分页查询数据重复问题
- Oracle 分页数据重复的问题
- 如何解决oracle分页查询数据重复问题
- mysql分页出现重复数据-order by
- oracle按时间查询翻页时出现与前面一页重复数据
- oracle分页查询数据重复问题的解决
- hql 分页出现数据重复问题