Sqlite:从表中选择 * 但 id

Posted

技术标签:

【中文标题】Sqlite:从表中选择 * 但 id【英文标题】:Sqlite: SELECT * BUT id FROM Table 【发布时间】:2013-03-13 22:37:59 【问题描述】:

我在一个表中有很多列,想要SELECT * FROM Table 除了一列(例如:位置),而不必列出我想要使用的所有列。

SELECT * EXCEPT id FROM Table???

【问题讨论】:

这能回答你的问题吗? Exclude a column using SELECT * [except columnA] FROM tableA? 看起来确实如此,但我在大约 10 年前问过这个问题,现在哈哈。但这是一个有用的帖子。 是的,它更适合 SEO。当我标记重复时,“这是否回答您的问题”评论也会自动发布。 【参考方案1】:

不,你不能那样做。

您列出您需要的列,或者您接受结果集包含的列比您需要的多一列。

【讨论】:

【参考方案2】:

当然,不。

但这里有一个解决方法。创建表的VIEW,例如

CREATE VIEW ViewName
AS
    SELECT col1, col2, col3, .... -- don't select the column name you want to hide
    FROM tableName;

VIEW 创建后,您现在就可以调用它了,

SELECT * FROM ViewName

【讨论】:

【参考方案3】:

sqlite 是一个嵌入式 DBMS,预计某些功能可以用宿主语言实现。例如,存储过程被排除在外,因为所有这些高级逻辑和流结构都将存在于宿主语言中。

如果有人在 SQL 之外思考,答案是“是”:使用宿主语言遍历表的列并构建一个选择语句以获得所需的架构。见How can I get the list of a columns in a table for a SQLite database?

【讨论】:

【参考方案4】:

一种粗略的方式,但出于任何原因需要时:

我们首先创建查询文本以创建视图的两步解决方案:

SELECT "CREATE TEMP VIEW my_view_1 AS SELECT " ||  (
SELECT 
    group_concat(name, ', ') 
FROM 
    pragma_table_info('my_table') 
WHERE 
    name != 'id') || 
" FROM my_table";

然后执行结果创建视图。

应该给出类似的东西:

CREATE TEMP VIEW test1 AS SELECT all, but, id, ... FROM my_table;

一行方便复制:

SELECT "CREATE TEMP VIEW my_view_1 AS SELECT " || (SELECT group_concat(name, ', ') FROM pragma_table_info('my_table') WHERE name != 'id') || " FROM my_table";

【讨论】:

【参考方案5】:

另一种方法:导出到 tsv 并使用cut -f 2-

sqlite3 -header my.db 'select * from mytable' | tr '|' '\t' | cut -f 2- > all_but_id.tsv

【讨论】:

以上是关于Sqlite:从表中选择 * 但 id的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 从 CoreData sqlite 表中获取特定的行数据

有没有一种方法可以使用 android-sqlite 游标从列数未知的表中选择 *

TSQL 从表中选择最后 10 行?

根据日期参数从表中选择周末或工作日数据

从表中选择数据并从另一个表中填充特定值

如何从表中选择记录并插入另一个表?