Поделиться через


Внешние соединения

ODBC поддерживает синтаксис слева, справа и полного внешнего соединения SQL-92. Escape-последовательность для внешних соединений

{oj внешнее соединение}

где находится внешнее соединение

table-reference {LEFT | RIGHT | FULL} OUTER JOIN {table-reference | outer-join} ON search-condition

Table-reference указывает имя таблицы, а условие поиска указывает условие соединения между таблицами и ссылками на таблицу.

Запрос внешнего соединения должен отображаться после ключевого слова FROM и до предложения WHERE (если он существует). Полные сведения о синтаксисе см. в статье "Внешняя последовательность escape-соединения" в приложении C: грамматика SQL.

Например, следующие инструкции SQL создают один и тот же результирующий набор, в котором перечислены все клиенты и показаны открытые заказы. Первый оператор использует синтаксис escape-последовательности. Вторая инструкция использует собственный синтаксис для Oracle и не совместима.

SELECT Customers.CustID, Customers.Name, Orders.OrderID, Orders.Status  
   FROM {oj Customers LEFT OUTER JOIN Orders ON Customers.CustID=Orders.CustID}  
   WHERE Orders.Status='OPEN'  
  
SELECT Customers.CustID, Customers.Name, Orders.OrderID, Orders.Status  
   FROM Customers, Orders  
   WHERE (Orders.Status='OPEN') AND (Customers.CustID= Orders.CustID(+))  

Чтобы определить типы внешних соединений, которые поддерживает источник данных и драйвер, приложение вызывает SQLGetInfo с флагом SQL_OJ_CAPABILITIES. Типы внешних соединений, которые могут поддерживаться, являются левыми, правыми, полными или вложенными внешними соединениями; внешние соединения, в которых имена столбцов в предложении ON не имеют того же порядка, что и соответствующие имена таблиц в предложении OUTER JOIN ; внутренние соединения в сочетании с внешними соединениями; и внешние соединения с помощью любого оператора сравнения ODBC. Если тип сведений SQL_OJ_CAPABILITIES возвращает значение 0, предложение внешнего соединения не поддерживается.