SQLite принимает несуществующие типы соединений в синтаксисе SQL - PullRequest
3 голосов
/ 14 апреля 2011

Я обнаружил это неожиданное поведение с SQLite. Похоже, что SQLite принимает произвольные ключевые слова в синтаксисе соединения SQL. Если я случайно наберу nautral join вместо natural join , то получится декартово произведение. Это ожидаемое поведение, функция или ошибка?

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

Протестировано с SQLite 3.7.3 на Debian 6.0 и SQLite 3.7.5 на Windows 7.

Добавить: SQLite - отличное программное обеспечение для работы с базами данных, и я рекомендую его для небольших и средних проектов. Вот мое краткое сравнение SQLite и PostgreSQL.

1 Ответ

2 голосов
/ 14 апреля 2011

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
...