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
???
绝对没有。
但这里有一个解决方法。创建一个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
不,你不能那样做。
您列出您需要的列,或者您接受结果集包含的列比您需要的多一列。
sqlite是一个嵌入式 DBMS,预计某些功能可以用宿主语言实现。例如,存储过程被排除在外,因为所有这些高级逻辑和流结构都将存在于宿主语言中。
如果有人在 SQL 之外思考,答案是“是”:使用宿主语言迭代表的列并构建一个 select 语句以获得所需的模式。请参阅如何获取 SQLite 数据库表中的列列表?
一种粗略的方式,但出于任何原因需要时:
我们首先创建查询文本以创建视图的两步解决方案:
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";
另一种方法:导出到 tsv 并使用cut -f 2-
:
sqlite3 -header my.db 'select * from mytable' | tr '|' '\t' | cut -f 2- > all_but_id.tsv