Sqlite:SELECT * BUT id FROM Table

时间:2013-03-24 11:44:07

标签: sql sqlite select

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

SELECT * EXCEPT id FROM Table ...

5 个答案:

答案 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