小编Dab*_*phy的帖子

SQLite"COUNT(*)"被认为有害吗?

考虑以下简单示例:

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;
Run Code Online (Sandbox Code Playgroud)

结果会是什么?

天真可能会认为它将是:

Bill|2
Sally|1
Run Code Online (Sandbox Code Playgroud)

但有经验的人会注意到SELECT查询缺少'GROUP BY'子句.事实上,Oracle在提出此查询时会抛出错误:

SQL ERROR: ORA-00937: not a single-group group function
Run Code Online (Sandbox Code Playgroud)

然而,SQLite不抱怨,而是产生:

Bill|3
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎是假的......我想,显示总行数可能有意义,但只是选择最后一个'first_name'似乎相当武断,而且有潜在危险.

这是一个我只是无法理解的错误或功能吗?有没有理由SQLite不提供类似的安全网?

sql database sqlite

2
推荐指数
1
解决办法
330
查看次数

标签 统计

database ×1

sql ×1

sqlite ×1