Combinaciones externas

ODBC admite la sintaxis de combinación externa completa, derecha e izquierda de SQL-92. La secuencia de escape para las combinaciones externas es

{oj outer-join}

donde outer-join es

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

table-reference especifica un nombre de tabla y search-condition especifica la condición de combinación entre table-references.

Una solicitud de combinación externa debe aparecer después de la palabra clave FROM y antes de la cláusula WHERE (si existe). Para conocer la sintaxis completa, consulte Secuencia de escape de combinación externa en el Apéndice C: Gramática de SQL.

Por ejemplo, las siguientes instrucciones SQL crean el mismo conjunto de resultados que enumera todos los clientes y muestra cuál tiene pedidos abiertos. La primera instrucción usa la sintaxis de secuencia de escape. La segunda instrucción usa la sintaxis nativa para Oracle y no es interoperable.

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(+))  

Para determinar los tipos de combinaciones externas que admiten un origen de datos y un controlador, una aplicación llama a SQLGetInfo con la marca SQL_OJ_CAPABILITIES. Los tipos de combinaciones externas que se pueden admitir son combinaciones externas izquierdas, derechas, completas o anidadas; combinaciones externas en las que los nombres de columna de la cláusula ON no tienen el mismo orden que sus respectivos nombres de tabla en la cláusula OUTER JOIN; combinaciones internas junto con combinaciones externas; y combinaciones externas con cualquier operador de comparación de ODBC. Si el tipo de información SQL_OJ_CAPABILITIES devuelve 0, no se admite ninguna cláusula de combinación externa.