テーブルを含む SQLite データベースがあるとします。
sqlite> create table person (id integer, firstname varchar, lastname varchar);
ここで、テーブルにあるすべてのエントリを取得したいと考えています。
sqlite> select t0.id, t0.firstname, t0.lastname from person t0;
これはうまく機能し、これは私が使用するものです。ただし、SQL を生成する Apple のフレームワーク (Core Data) を使用しました。このフレームワークは、わずかに異なる SQL クエリを生成します。
sqlite> select 0, t0.id, t0.firstname, t0.lastname from person t0;
このフレームワークによって生成されるすべての SQL クエリは、"select 0," で始まります。何故ですか?
説明コマンドを使用して何が起こっているのかを確認しようとしましたが、これは決定的ではありませんでした-少なくとも私にとっては。
sqlite> explain select t0.id, t0.firstname, t0.lastname from person t0;
addr opcode p1 p2 p3 p4 p5 comment
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
0 Trace 0 0 0 00 NULL
1 Goto 0 11 0 00 NULL
2 OpenRead 0 2 0 3 00 NULL
3 Rewind 0 9 0 00 NULL
4 Column 0 0 1 00 NULL
5 Column 0 1 2 00 NULL
6 Column 0 2 3 00 NULL
7 ResultRow 1 3 0 00 NULL
8 Next 0 4 0 01 NULL
9 Close 0 0 0 00 NULL
10 Halt 0 0 0 00 NULL
11 Transactio 0 0 0 00 NULL
12 VerifyCook 0 1 0 00 NULL
13 TableLock 0 2 0 person 00 NULL
14 Goto 0 2 0 00 NULL
2 番目のクエリのテーブルは次のようになります。
sqlite> explain select 0, t0.id, t0.firstname, t0.lastname from person t0;
addr opcode p1 p2 p3 p4 p5 comment
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
0 Trace 0 0 0 00 NULL
1 Goto 0 12 0 00 NULL
2 OpenRead 0 2 0 3 00 NULL
3 Rewind 0 10 0 00 NULL
4 Integer 0 1 0 00 NULL
5 Column 0 0 2 00 NULL
6 Column 0 1 3 00 NULL
7 Column 0 2 4 00 NULL
8 ResultRow 1 4 0 00 NULL
9 Next 0 4 0 01 NULL
10 Close 0 0 0 00 NULL
11 Halt 0 0 0 00 NULL
12 Transactio 0 0 0 00 NULL
13 VerifyCook 0 1 0 00 NULL
14 TableLock 0 2 0 person 00 NULL
15 Goto 0 2 0 00 NULL