我试图获取查询返回的行的绝对记录号(在Perl中)。让我们说我查询我的表如下:
my $stmt = "SELECT * FROM MAIN WHERE item='widget' LIMIT 1;";
my $sth = $dbh->prepare( $stmt );
my $rv = $sth->execute();
如何找出返回行的绝对行号?我尝试使用ROWID:
my $stmt = "SELECT ROWID, * FROM MAIN WHERE item='widget' ORDER BY ROWID LIMIT 1;";
my $sth = $dbh->prepare( $stmt );
my $rv = $sth->execute();
my $row = $sth->fetchrow_hashref();
if( defined( $row ) ) {
$RecordNumber = $row->{'rowid'};
}
如果您从未删除表中的行,则此方法有效。
但行ID永远不会改变。因此,如果从表中删除行,则rowid不再与表中的绝对行号匹配。
我希望我的问题很明确(英语不是我的母语)。
答案 0 :(得分:1)
让我们举个例子
sqlite> create table my_example (field1);
sqlite> insert into my_example values ('abc');
sqlite> insert into my_example values ('booooo');
sqlite> insert into my_example values ('3231-556');
sqlite> .mode column
sqlite> .header on
sqlite> select * from my_example;
field1
----------
abc
booooo
3231-556
sqlite> select rowid, * from my_example;
rowid field1
---------- ----------
1 abc
2 booooo
3 3231-556
sqlite> delete from my_example where field1='abc';
sqlite> select rowid, * from my_example;
rowid field1
---------- ----------
2 booooo
3 3231-556
sqlite> insert into my_example values ('abc');
sqlite> select rowid, * from my_example;
rowid field1
---------- ----------
2 booooo
3 3231-556
4 abc
sqlite>
获得我想要实现的目标(类似于rown_num)的方法是:
sqlite> select (select count(*) from my_example b where a.rowid >= b.oid ) as cnt, * from my_example a;
cnt field1
---------- ----------
1 booooo
2 3231-556
3 abc
sqlite>
希望这会有所帮助