我在表格中有很多列,想要SELECT * FROM Table
除了一列(例如:位置),而不必列出我想要使用的所有列。
SELECT * EXCEPT id FROM Table
...
答案 0 :(得分:8)
绝对不,不。
但这是一个解决方法。创建表的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
答案 1 :(得分:5)
不,你做不到。
列出您需要的那些,或者您接受结果集包含的列多于您需要的列。
答案 2 :(得分:1)
一种粗略的方法,但是由于某种原因而需要时:
两步解决方案,我们首先创建查询文本以创建视图:
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";
答案 3 :(得分:0)
sqlite 是嵌入式DBMS,并且可以使用宿主语言实现某些功能。例如,存储过程被排除在外,因为所有这些高级逻辑和流结构都将以宿主语言存在。
如果在SQL之外思考,答案是“是”:使用宿主语言遍历表的列并构建select语句以获取所需的模式。参见How can I get the list of a columns in a table for a SQLite database?
答案 4 :(得分:0)
另一种方法:导出到 tsv 并使用 cut -f 2-
:
sqlite3 -header my.db 'select * from mytable' | tr '|' '\t' | cut -f 2- > all_but_id.tsv