【问题标题】:Why do sqlite columns have different names for views and tables?为什么 sqlite 列的视图和表的名称不同?
【发布时间】:2014-03-10 12:17:40
【问题描述】:

对于这个示例数据库:

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"

为什么这些不同?

【问题讨论】:

    标签: c++ sql c sqlite


    【解决方案1】:

    令人惊讶的是,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

    【讨论】:

      猜你喜欢
      • 2017-07-01
      • 2014-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 2018-06-04
      • 2016-07-24
      相关资源
      最近更新 更多