考虑以下简单示例:
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 不提供类似的安全网是否有原因?