sql,如果对2张表,按时间排序呢?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql,如果对2张表,按时间排序呢?相关的知识,希望对你有一定的参考价值。
表1: comment(评论的数据)
id comment_content(评论内容) create_time(评论时间)
表2: comment_reply(回复的数据)
id comment_id(comment的id) replyContent(回复内容) create_time(回复时间)
要求:按照“评论时间”和“回复时间”最新排序,取得前10条数据
(comment不一定有回复的)
检索出的结果,最好能区别出是哪个表的数据。
下面表中,用的是left join,即使其中一个表没数据,也会填冲,能清晰的分辨出吗,
select * from
(select * from (select 'comment' ly ,comment_content cc,create_time ct from comment order by create_time desc ) where rownum<=10
union
select * from(select 'comment_reply' ly ,replyContent cc,create_time ct from comment_reply order by create_time desc)where rownum<=10 )
where rownum <=10;
不过所提需求需要对两个表全扫描,数据量大的时候可能会有性能瓶颈追问
应用是分页获取的,如果不用sql,通过程序排序,那是不是要全表数据取出来呢,有没好的思路,非常感谢
追答可以考虑两个表生成数据时用一个sequence生成一个顺序字段,这样只取该字段的最后十个数的数据就行了。
追问数据是根据插入的顺序排的
参考技术A SELECT *FROM (SELECT Cai.*,Coi.* ,row_number()over(ORDER BY Cai/Coi.Createdate) rn
FROM Ca_Applicant_Info Cai, Ca_Order_Info Coi
WHERE Coi.Userid = Cai.Id
AND Coi.Ispay = 1
AND Coi.Delflag = 0
AND Coi.State = 0
) Wk
WHERE Wk.Rn > 0
AND Wk.Rn <= 2
不需要改动,数据库会自动识别Createdate时间格式,不需要convert转换.追问
非常感谢,不过好像和问题没有关联哎
本回答被提问者采纳同张表中同时查询两个字段显示一个字段,对两个字段进行按时间排序
select b.bid_name as bidName,bd.repayment_way as depict,r.exact_repayment_time as time, r.should_repayment_principal as amount, ‘待收本金‘ as typeContent from repayment r INNER JOIN bid b ON r.bid_id = b.bid_id INNER JOIN bid_details bd ON b.bid_id = bd.bid_id where r.user_id=1 and r.state = 1 UNION select b.bid_name as bidName,bd.repayment_way as depict,r.exact_repayment_time as time, r.should_repayment_interest as amount, ‘待收利息‘ as typeContent from repayment r INNER JOIN bid b ON r.bid_id = b.bid_id INNER JOIN bid_details bd ON b.bid_id = bd.bid_id where r.user_id=1 and r.state = 1 ORDER BY time
以上是关于sql,如果对2张表,按时间排序呢?的主要内容,如果未能解决你的问题,请参考以下文章
sql查询:使用内连接查询两张表的时候,如果左边表的一条记录对应了右边表的两条记录,结果显示排列问题