2008-09-02 11 views
9

Estoy manteniendo un código que utiliza un operador * = en una consulta a una base de datos Sybase y no puedo encontrar documentación sobre él. ¿Alguien sabe qué * = hace? Supongo que es una especie de unión.* = en Sybase SQL

select * from a, b where a.id *= b.id

I no puede averiguar cómo esto es diferente de:

select * from a, b where a.id = b.id
+0

Por favor tenga cuidado. Actualmente está en desuso y necesita una activación explícita en la configuración de la base de datos. – frlan

Respuesta

12

De http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc34982_1500/html/mig_gde/mig_gde160.htm:

interior y mesas exteriores

los términos mesa exterior y el interior de mesa describir la colocación de las mesas en una combinación externa:

  • En una unión a la izquierda, la tabla externa y la tabla interna son las tablas izquierda y derecha, respectivamente. La tabla externa y la tabla interna también se conocen como las tablas de conservación de filas y de suministro nulo, respectivamente.

  • En una unión a la derecha, la tabla exterior y la tabla interna son las tablas derecha e izquierda, respectivamente.

Por ejemplo, en las consultas abajo, T1 es la tabla externa y T2 es la tabla interna:

  • T1 dejó unirse T2
  • T2 unirse derecho T1

O bien, mediante la sintaxis de Transact-SQL:

  • T1 * = T2
  • T2 = T1 *
+1

wow, gracias a sybase por hacer este sonido complicado y confuso. –

+0

Parece que el enlace que proporcionó dice sobre cosas diferentes. – Trismegistos

9

Significa combinación externa, un simple = significa combinación interna.

*= is LEFT JOIN and =* is RIGHT JOIN. 

(o viceversa, siempre me olvido ya que no estoy usando nada más, y Google no es útil en la búsqueda de * =)

+0

esta respuesta es correcta. –

6

Por supuesto, usted debe escribir de esta manera:

SELECT * 
FROM a 
LEFT JOIN b ON b.id=a.id 

El a, b sintaxis es malo.

+0

No sé nada sobre el mal, pero ciertamente es propiedad de Sybase y Microsoft SQL Server, y no es compatible con otras marcas de bases de datos. –

0
select * from a, b where a.id = b.id

requiere que una fila existe en donde b.id = a.id con el fin de devolver una respuesta

select * from a, b where a.id *= b.id

llenarán las columnas de B con nulos cuando no había una fila b donde b.id = a.id.

5

ANSI-82 sintaxis

select 
    * 
from 
    a 
    , b 

where 
    a.id *= b.id 

ANSI-92

select 
    * 
from 
    a 
    left outer join b 
     on a.id = b.id 
+0

Creo que te refieres a SQL-89 y SQL-92, no ANSI-82 y ANSI-92. –

Cuestiones relacionadas