3

我在 SQLite 中发现了这种意外行为。SQLite 似乎接受 SQL 连接语法中的任意关键字。如果我不小心输入了自然连接而不是自然连接,则会产生笛卡尔积。这是预期的行为、功能还是错误?

select count(*) from pri; -- 22
select count(*) from sec; -- 57458

select count(*) from pri natural join sec; -- 57458 
select count(*) from pri nautral join sec; -- 1264076
select count(*) from pri advanced natural join sec; -- 57458
select count(*) from pri imaginary join sec; -- 1264076

在 Debian 6.0 上使用 SQLite 3.7.3 进行测试,在 Windows 7 上使用 SQLite 3.7.5 进行测试。

补充:SQLite 是一款出色的数据库软件,我推荐它用于中小型项目。这是我对 SQLite 与 PostgreSQL 的简要比较。

4

1 回答 1

2

nautral并被imaginary解析为表的别名:

select count(*) from (pri) natural join sec; -- 57458 
select count(*) from (pri AS nautral) join sec; -- 1264076
select count(*) from (pri AS advanced) natural join sec; -- 57458
select count(*) from (pri AS imaginary) join sec; -- 1264076
于 2011-04-14T10:35:39.583 回答