次の簡単な例を考えてみましょう。
prompt% sqlite3 test.db
sqlite> create table employee (
employee_id integer primary key,
first_name varchar2(32) not null,
last_name varchar2(32) not null
);
sqlite> insert into employee (first_name, last_name) values ('Bill', 'Smith');
sqlite> insert into employee (first_name, last_name) values ('Sally', 'Jones');
sqlite> insert into employee (first_name, last_name) values ('Bill', 'Jones');
sqlite> select first_name, count(*) from employee;
結果はどうなりますか?
素朴な人は、次のようになると想定するかもしれません。
Bill|2
Sally|1
しかし、経験者は、SELECT クエリに 'GROUP BY' 句がないことに気付くでしょう。Oracle は、このクエリを提示すると、実際にはエラーをスローします。
SQL ERROR: ORA-00937: not a single-group group function
ただし、SQLite は文句を言うのではなく、次の結果をもたらします。
Bill|3
これは私には偽物に思えます...行の総数を表示することは理にかなっていると思いますが、単に最後の「first_name」を選択するのはかなり恣意的で潜在的に危険に思えます。
これはバグですか、それとも私が理解できていない機能ですか? SQLite が同様のセーフティ ネットを提供しない理由はありますか?