【问题标题】:Sqlite: SELECT * BUT id FROM TableSqlite:从表中选择 * 但 id
【发布时间】:2013-03-13 22:37:59
【问题描述】:

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

SELECT * EXCEPT id FROM Table???

【问题讨论】:

  • 看起来确实如此,但我在大约 10 年前问过这个问题,现在哈哈。但这是一个有用的帖子。
  • 是的,它更适合 SEO。当我标记重复时,“这是否回答您的问题”评论也会自动发布。

标签: sql sqlite select


【解决方案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
          

          【讨论】:

            猜你喜欢
            • 2021-11-08
            • 2013-05-26
            • 1970-01-01
            • 1970-01-01
            • 2023-04-03
            • 2011-08-04
            • 1970-01-01
            • 1970-01-01
            • 2014-01-12
            相关资源
            最近更新 更多