20

テーブルに多くの列があり、SELECT * FROM Table使用するすべての列をリストする必要なしに、1つの列(例:場所)を除いてみたいと思いました。

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

いいえ、それはできません。

必要なものをリストするか、結果セットに必要な列が1つ多いことを受け入れます。

于 2013-03-24T11:46:18.113 に答える
4

sqliteは組み込みDBMSであり、一部の機能はホスト言語で実装できることが期待されています。たとえば、このような高度なロジックとフロー構造はすべてホスト言語で存在するため、ストアドプロシージャは除外されます。

SQLの外部を考える場合、答えは「はい」です。ホスト言語を使用してテーブルの列を反復処理し、selectステートメントを作成して目的のスキーマを取得します。SQLiteデータベースのテーブルの列のリストを取得するにはどうすればよいですか?を参照してください。

于 2019-07-20T20:02:58.553 に答える
4

大雑把な方法ですが、何らかの理由で必要な場合:

最初にクエリテキストを作成してビューを作成する2段階のソリューション:

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;

簡単にコピーするための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";

于 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 に答える