sqlite 如何获取结果集中某个记录的行号?

skyjsq 2010-04-30 10:54:11
在2个表的连接查询时,
select * from t1 inner join t2 where t1.PageID =t2.ID and t2.BookID=1 order by t1.PageID
查询结果是满足条件的t1表中的记录,想知道如何获取结果集中某行的行号?

Sql sever中的方法是这样的,
select IDENTITY(int, 1,1) as row_no,* into pp from page
select * from #temp
不过sqlite貌似不支持这样


...全文
2088 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyjsq 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 acmain_chm 的回复:]

SQLite 中的rowid 如2楼所述,并不是SQL server或者 oracle 中的概念。

你需要用其它方法来实现。比如 select * , (select count(*) from table1 where id<=a.id) as rowid from table1 a order by id;

具体你可以参考下贴。
http://blog.csdn.net/ACM……
[/Quote]


多谢了,我看了你的这篇文章,这个rownum 反映的还是记录在原表中的ID号,我想要的是一个属性:表示记录在select查询结果相对的行号.
skyjsq 2010-04-30
  • 打赏
  • 举报
回复
多谢两位,rowid 在sqlite中是可以用,不过select 返回时,rowid为Null,不能反映记录的逻辑顺序
feature?这个是什么意思~~能解释一下吗
ACMAIN_CHM 2010-04-30
  • 打赏
  • 举报
回复
SQLite 中的rowid 如2楼所述,并不是SQL server或者 oracle 中的概念。

你需要用其它方法来实现。比如 select * , (select count(*) from table1 where id<=a.id) as rowid from table1 a order by id;

具体你可以参考下贴。
http://blog.csdn.net/ACMAIN_CHM/archive/2009/04/20/4095531.aspx
iihero 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wwwwa 的回复:]

select *,rowid from (
select * from t1 inner join t2 where t1.PageID =t2.ID and t2.BookID=1 order by t1.PageID) a

rowid在SQLITE中可以用
[/Quote]
是可以用的,不过,它记录的是物理表的实际rowid,可能不是楼主想要的。楼主想要的是逻辑的行号。可能得要借助于临时表

不过,我们可以向sqlite提feature,呵呵
WWWWA 2010-04-30
  • 打赏
  • 举报
回复
select *,rowid from (
select * from t1 inner join t2 where t1.PageID =t2.ID and t2.BookID=1 order by t1.PageID) a

rowid在SQLITE中可以用
skyjsq 2010-04-30
  • 打赏
  • 举报
回复
有错啊,提示 no such column:rowid
iihero 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwwwa 的回复:]

select *,rowid as anum from tt
[/Quote]

Re. 不过,这个rowid似乎有个缺陷,它只记录原表中的rowid,如果是两表关联,它记录的还是某一个的rowid,它的值可能有重复。
WWWWA 2010-04-30
  • 打赏
  • 举报
回复
select *,rowid as anum from tt
ACMAIN_CHM 2010-04-30
  • 打赏
  • 举报
回复
建议你直接给出你的create table 语句和 insert 语句,这样别人可以创建和你完全一样的表和数据进行调试,
skyjsq 2010-04-30
  • 打赏
  • 举报
回复
问题通过程序解决了,下面把问题描述一下,看看有没有人能给出一个用sql语句解决的方法:
表直接的关系
Book表
ID Name
1 aa
2 bb
Pagegroup表
ID BookID Name
1 1 ee
2 1 ff
3 2 dd
4 1 gg
Page表
ID PageGroupID Name
1 1 page1
2 1 page2
3 2 page3
4 2 page4
5 1 page5

想要查询BookID=1 下面的所有Page,并根据Page的ID判定其在查询结果中排的第几行
select * from page inner join pagegroup where pagegroup.BookID =1 and pagegroup.ID =page.PageGroupID order by pagegroup.ID
所得结果:
ID PageGroupID Name
1 1 page1
2 1 page2
5 1 page5
3 2 page3
4 2 page4
如果pageID =5 可以判定其在BookID=1的结果集中排的第3行
WWWWA 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 skyjsq 的回复:]
多谢两位,rowid 在sqlite中是可以用,不过select 返回时,rowid为Null,不能反映记录的逻辑顺序
feature?这个是什么意思~~能解释一下吗
[/Quote]
测试了一下,确实是这样,两种方法
1、插入有自增字段的临时表;
2、如有唯一标识的字段的话,查询解决。
ACMAIN_CHM 2010-04-30
  • 打赏
  • 举报
回复
[Quote]多谢了,我看了你的这篇文章,这个rownum 反映的还是记录在原表中的ID号,我想要的是一个属性:表示记录在select查询结果相对的行号.[/Quote]
或者这样,
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧