gpt4 book ai didi

c++ - 为什么 sqlite 列的 View 和表名称不同?

转载 作者:搜寻专家 更新时间:2023-10-31 01:05:39 24 4
gpt4 key购买 nike

对于这个示例数据库:

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(...) 会为 View 和表上的选择产生不同的结果。在表的情况下,不包括别名,在 View 的情况下。

结果如下:

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

为什么这些不同?

最佳答案

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

来自 sqlite3_column_name功能文档:

The name of a result column is the value of the "AS" clause for that column, if there is an AS clause. If there is no AS clause then the name of the column is unspecified and may change from one release of SQLite to the next.

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

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

在这两种情况下,sqlite3_column_name 都将返回 textfield

关于c++ - 为什么 sqlite 列的 View 和表名称不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22299893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com