sql,如果对2张表,按时间排序呢?

表1: comment(评论的数据)
id comment_content(评论内容) create_time(评论时间)

表2: comment_reply(回复的数据)
id comment_id(comment的id) replyContent(回复内容) create_time(回复时间)

要求:按照“评论时间”和“回复时间”最新排序,取得前10条数据
(comment不一定有回复的)
检索出的结果,最好能区别出是哪个表的数据。

下面表中,用的是left join,即使其中一个表没数据,也会填冲,能清晰的分辨出吗,

可以考虑用union实现,另外用常量区分数据来源
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生成一个顺序字段,这样只取该字段的最后十个数的数据就行了。

追问

数据是根据插入的顺序排的

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-11-19
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转换.追问

非常感谢,不过好像和问题没有关联哎

本回答被提问者采纳

把两张表的数据按时间排序查询的SQL语句
表a为入库表 表b为出库表 它们都有一个日期字段 mkrdat,货号为 goodsid,数量字段为qty 那么两张表的组合方式可以这样 select goodsid,qty ,mkrdat from (select goodsid,qty ,mkrdat from a where goodsid ='查询货号' union all select goodsid,qty ,mkrdat from b where goodsid ='查询...

SQL两个表按时间查询
select 要提取的数据 from 表名 order by 时间 (asc\/desc)asc 是升序 也可以省略 后者是降序 不可以省的

sql对两个表的数据进行排序
select id as id,artTitle as content,adddate as date from article union all select id as id, content as content,adddate as date from comment ) A order by A.date

SQL按时间排序
按修改的时间倒序排列语句为:select * from MyTable Order By ModifyTime Desc 如果只想显示最新一条,语句为:select top 1 * from MyTable Order By ModifyTime Desc 示例:表查询结果为:按时间排序后为:只显示最新一条结果为:扩展:ORDER BY 语句 ORDER BY 语句用于根据指定的列对结果集进行排序。...

sql语句中用innerjoin连接两张表,大表放在前面比较快还是小表放在前面比...
小表在前可以提高sql执行效率。首先将大表放在前面,即如图(tmp2表数据量为40亿,tmp1数据量只有81条),这样执行时间为3小时21分钟,然后再将小表放在前面,执行速度为10分钟。

sql语句时间排序 sql语句按照时间排序
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。比如要排序:select date from tablename order by date desc 按date降序排列。SQL语句怎么写?先按时间排序,再按姓名排序? 将字段依次写在order by 后面即可 , 中间用逗号隔开 select * from 表 order by time , name select * from 表...

求解SQL数据库两张表数据的排序问题
先看第一个left(Dept_ID,3) 首先要进行部门排序的 我们是以左边三个符号位排序信息的 排出来就是 001 001001 ..002 ..003 003...上面的排序不保证每个部门里面的排序时按照部门号先 然后再改部门的单位的顺序 所以加上flag asc 在每组里面 要让部门号先 通过FLAG=0 将部门号放在了前面 所以...

...如何将里面的值合并 并且按照日期排序组成新表?日期格式201101 201...
你对数据库的理解有问题 数据库信息不是顺序的,你要用相应的语句来给她排序输出 所以用union加上sort函数就能实现你的排序要求,做个视图就行,你组成新表,原来的A表B表有更新,你还要重新处理,视图自动就是最新结果

两表中的字段相同,如何在一张表中显示, 按照时间(bydata)降序怎么写SQL...
select * from (select id , bydata , money , content , in_out from shouru union all select id , bydata , money , content , in_out from zhichu ) ALL order by ALL.bydata desc

...结构相同的字段部分),合并成一个表,并按时间排序.
Access数据库,用一条SQL语句,提取两个表的内容(数据结构相同的字段部分),合并成一个表,并按时间排序.SELECT newtable.name,newtable.time FROM (SELECT * FROM (SELECT NAME,TIME FROM table1) UNION ALL (SELECT NAME,TIME FROM table2)) as newtable order by newtable.TIME DESC ...

相似回答