为什么sqlite列的视图和表名称不同?

时间:2014-03-10 12:17:41

标签: c++ sql c sqlite

对于此示例数据库:

create table atable (
  textfield varchar(256)
);

create view aview as select T.textfield from atable T;

并选择:

select T.textfield from atable T;

select T.textfield from aview T;

调用sqlite的sqlite3_column_name(...)会在视图和表上选择不同的结果。如果是表,则不包括别名,如果是查看的话。

结果如下:

table query - sqlite3_column_name (db, 0) -> "textfield"
view query - sqlite3_column_name (db, 0) -> "T.textfield"

为什么这些不同?

1 个答案:

答案 0 :(得分:4)

令人惊讶的是,SQLITE不保证sqlite_3_column_name返回的列名称,除非您使用AS关键字专门提供名称。

来自sqlite3_column_name功能文档:

  

结果列的名称是“AS”子句的值   列,如果有AS子句。如果没有AS子句那么   列的名称未指定,可能会从一个版本更改   SQLite到下一个。

因此,如果要依赖返回的值,则必须手动指定列名。将您的查询更改为:

select T.textfield as textfield from atable T;
select T.textfield as textfield from aview T;

并且在这两种情况下sqlite3_column_name都会返回textfield