👓
SQLiteで吐き出したテーブルの末尾に任意の値のレコードを追加する
データベースに手を加えることなく、SQLiteで吐き出したテーブルの末尾に任意の値を持ったレコードを追加して出力するためのTips。
3秒で説明
出力したいテーブルと同じ形式のテーブルをSELECT文で作って、UNION ALL
で接続する。
具体的な例
ex
)
a) DBから出力したテーブル(テーブル名SELECT * FROM ex
id | name | |
---|---|---|
1 | foo | foo@example.com |
2 | bar | bar@example.com |
3 | baz | baz@example.com |
b) DBに存在しない任意のレコード(追記したいもの)
SELECT "99" AS "id",
"test" AS "name",
"test@example.com" AS "email"
id | name | |
---|---|---|
99 | test | test@example.com |
a) に b) を追加して出力
SELECT * FROM ex
UNION ALL
SELECT "99" AS "id",
"test" AS "name",
"test@example.com" AS "email"
id | name | |
---|---|---|
1 | foo | foo@example.com |
2 | bar | bar@example.com |
3 | baz | baz@example.com |
99 | test | test@example.com |
できると何が嬉しいの?
DBに変更を施さず、クエリのみで任意のデータが追加されたテーブルを吐き出せる。
例えば、何かの処理のためにクエリで抽出したレコードリストの末尾にテスト用のレコードを追加するような処理をSQLで完結させることができる。
参考:もっと追加したい時
面倒だけど1レコードづつUNION ALL
でくっつける。
SELECT * FROM ex
UNION ALL
SELECT "991" AS "id",
"test1" AS "name",
"test2@example.com" AS "email"
SELECT "992" AS "id",
"test2" AS "name",
"test2@example.com" AS "email"
id | name | |
---|---|---|
1 | foo | foo@example.com |
2 | bar | bar@example.com |
3 | baz | baz@example.com |
99 | test1 | test1@example.com |
99 | test2 | test2@example.com |
Discussion