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 表中获取特定的行数据