Как уже говорили другие, синтаксис (+)
является устаревшим, проприетарным синтаксисом, который Oracle годами использовал для достижения тех же результатов, что и OUTER JOIN
. Я предполагаю, что они приняли свой собственный синтаксис до того, как SQL-92 определился со стандартным синтаксисом.
Эквивалент запроса, который вы показали, с использованием стандартного синтаксиса SQL OUTER JOIN
(который теперь поддерживается всеми основными реализациями СУБД) будет следующим:
SELECT
Table1.Category1,
Table1.Category2,
COUNT(*) AS Total,
COUNT(Table2.Stat) AS Stat
FROM Table1
LEFT OUTER JOIN Table2 ON (Table1.PrimaryKey = Table2.ForeignKey)
GROUP BY Table1.Category1, Table1.Category2;
Что означает:
- Все строки из
Table1
включены в результат запроса.
- Если в
Table2
есть совпадающие строки, включите эти строки (повторяя содержимое с Table1
, если в Table2
есть несколько совпадающих строк).
- Если в
Table2
нет совпадающих строк, используйте NULL
для всех столбцов Table2
в результате запроса.