20

I have many columns in a table and wanted to SELECT * FROM Table except for one column (ex: location) without having to list all the columns I want to use.

SELECT * EXCEPT id FROM Table???

4

5 回答 5

14

绝对没有。

但这里有一个解决方法。创建一个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
于 2013-03-24T11:50:57.017 回答
6

不,你不能那样做。

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

于 2013-03-24T11:46:18.113 回答
4

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

如果有人在 SQL 之外思考,答案是“是”:使用宿主语言迭代表的列并构建一个 select 语句以获得所需的模式。请参阅如何获取 SQLite 数据库表中的列列表?

于 2019-07-20T20:02:58.553 回答
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";

于 2019-10-08T07:05:30.903 回答
0

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

sqlite3 -header my.db 'select * from mytable' | tr '|' '\t' | cut -f 2- > all_but_id.tsv
于 2021-05-04T14:48:41.883 回答