Какие объединения поддерживает SQLite? - PullRequest
36 голосов
/ 22 апреля 2009

Согласно синтаксису объединения , SQLite имеет 13 различных операторов соединения:

,
JOIN
LEFT JOIN
OUTER JOIN
LEFT OUTER JOIN
INNER JOIN
CROSS JOIN
NATURAL JOIN
NATURAL LEFT JOIN
NATURAL OUTER JOIN
NATURAL LEFT OUTER JOIN
NATURAL INNER JOIN
NATURAL CROSS JOIN

Они все уникальны? Какие эквивалентны?

1 Ответ

49 голосов
/ 22 апреля 2009

Грамматика SQLite немного отличается от спецификации SQL-92 , согласно которой следующее недопустимо:

*OUTER JOIN
*NATURAL OUTER JOIN
*NATURAL CROSS JOIN

Первые два, потому что <join type>, чтобы содержать OUTER, также должно включать <outer join type> перед ним. Последнее, потому что NATURAL может происходить только в <qualified join>, а не <cross join>. Похоже, что они не ведут себя в соответствии с какой-либо спецификацией, поэтому лучше их избегать.

В ответ на список рассылки , SQLite3 поддерживает только три объединения: CROSS JOIN, INNER JOIN и LEFT OUTER JOIN. Следующее эквивалентно:

, == CROSS JOIN
JOIN == INNER JOIN
LEFT JOIN == LEFT OUTER JOIN

Как объяснено в статье в википедии ключевое слово NATURAL является сокращением для поиска и сопоставления в столбцах с одинаковыми именами и не влияет на тип объединения.

В соответствии с страницей SQLite , 'RIGHT' и 'FULL' OUTER JOIN не поддерживаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...