sqlite视图没有rowid值

sqlite视图没有rowid值,sqlite,sql-view,Sqlite,Sql View,我发现视图没有rowid,这是预期的吗?下面是一个简化的示例 create table t2 (u text); insert into t2 values ('x'); insert into t2 values ('y'); create table t1 (t text, i integer); insert into t1 values ('a',1); insert into t1 values ('b',2); insert into t1 values ('c',1); inser

我发现视图没有rowid,这是预期的吗?下面是一个简化的示例

create table t2 (u text);
insert into t2 values ('x');
insert into t2 values ('y');
create table t1 (t text, i integer);
insert into t1 values ('a',1);
insert into t1 values ('b',2);
insert into t1 values ('c',1);
insert into t1 values ('d',2);
create view v as select * from t1 join t2 on t1.i=t2.rowid;
select rowid,* from t1;
ro t  i
-- -- --
1  a  1
2  b  2
3  c  1
4  d  2
select rowid,* from v;
ro t  i  u
-- -- -- ----------
   a  1  x
   b  2  y
   c  1  x
   d  2  y
我通过在t1中添加一个“ID”列来解决这个问题,其中ID=rowid

我在sqlite视图网页上快速执行了^F“rowid”,未找到对rowid的引用。一个快速的谷歌搜索给出了很多关于没有ROWID的匹配,所以我没有找到答案


我想知道我是否误用了这个观点。基本上,视图是我展示单个表的一种方式,该表将多个相关表链接在一起。然而,我需要通过“rowid”访问视图。为了避免讨论为什么使用rowid而不是ID列,原因是我的表只写一次(由数据提取器),然后是只读的。数据提取器知道它输入了什么,然后在哪里知道rowid,然后避免创建冗余列。

rowid
值标识表行;视图中没有存储行

要识别视图中使用的表中的行,只需在视图中包含该表中的
rowid
值即可:

CREATE VIEW v AS SELECT t1.rowid, ... FROM t1 ...;

无论如何,声明为的列是
rowid
的别名(因此不需要额外存储)。 如果您确实想使用
rowid
值,最好在表定义中明确包含这样一列:

CREATE TABLE t1 (
    id INTEGER PRIMARY KEY,
    t TEXT,
    i INTEGER
);

(它仍然表现为
rowid
;您可以通过在其中插入空值获得。)

Thanx,我缺少主键技巧。我确实添加了一个ID列,并在其中复制了rowid。Thanx对于空值插入技巧,我的数据提取器知道该ID,但仍将其绑定以进行插入,而空值将删除该绑定。好东西:)