テーブルに多くの列があり、SELECT * FROM Table
使用するすべての列をリストする必要なしに、1つの列(例:場所)を除いてみたいと思いました。
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
いいえ、それはできません。
必要なものをリストするか、結果セットに必要な列が1つ多いことを受け入れます。
sqliteは組み込みDBMSであり、一部の機能はホスト言語で実装できることが期待されています。たとえば、このような高度なロジックとフロー構造はすべてホスト言語で存在するため、ストアドプロシージャは除外されます。
SQLの外部を考える場合、答えは「はい」です。ホスト言語を使用してテーブルの列を反復処理し、selectステートメントを作成して目的のスキーマを取得します。SQLiteデータベースのテーブルの列のリストを取得するにはどうすればよいですか?を参照してください。
大雑把な方法ですが、何らかの理由で必要な場合:
最初にクエリテキストを作成してビューを作成する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";
別のアプローチ:tsvにエクスポートして使用するcut -f 2-
:
sqlite3 -header my.db 'select * from mytable' | tr '|' '\t' | cut -f 2- > all_but_id.tsv