首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite3:当SELECTing来自(子查询)时,列名中的意外包装器

问SQLite3:当SELECTing来自(子查询)时,列名中的意外包装器
EN

Stack Overflow用户
提问于 2013-03-14 18:18:46
回答 1查看 189关注 0票数 0

我正在使用SQLite3 in .cpp,并使用std::map<std::string, special_variant_type>存储行。这一切都很好,但我发现,当我从SELECT从(subqueries)获得时,列名似乎保留了包装器。

比较以下查询:

代码语言:javascript
复制
SELECT `name` FROM `sqlite_master` WHERE `type`='table'; // works as I expected

和(选任何)

代码语言:javascript
复制
// do not work as I expected but might work as expected...
SELECT `name` FROM (SELECT `name` FROM `sqlite_master` WHERE `type`='table');
SELECT [name] FROM (SELECT `name` FROM `sqlite_master` WHERE `type`='table');

问题:第一个会带来未修饰的列名。因此,列名是name。对于第二个从子查询中选择的列,列名不受影响。返回backticks, square brackets [], double quotes "..。任何应该是..。海事组织被丢弃了。

这是预期的行为吗?看起来不一致,要么保存包装,要么丢弃它们。

PS:我现在在对列映射时丢弃它们,不过.我想知道这是否正确..。

PPS:它同时发生在sqlite3库和Navicat客户机中。

快速解决方案:3.7.14坏了。更新你的客户到一个新版本!替换第三方软件中的DLL(但保留备份副本以防万一)也有此问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-15 09:04:20

似乎是一致的:

代码语言:javascript
复制
$ sqlite3
SQLite version 3.7.15.2 2013-01-09 11:53:05
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table test(x);
sqlite> .headers on
sqlite> .mode columns
sqlite> SELECT `name` FROM `sqlite_master` WHERE `type`='table';
name
----------
test
sqlite> SELECT `name` FROM (SELECT `name` FROM `sqlite_master` WHERE `type`='table');
name
----------
test

无论如何,SQLite不能保证列名。

若要在结果中强制使用列名,请使用AS定义别名。

访问列的最可靠方法是通过它们的索引,从而避免公式或重复列名的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15417165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档