Pregunta

¿Cuál es la sintaxis para especificar una unión izquierda utilizando la sintaxis ANSI-92 anterior (es decir, * =) cuando parte de la cláusula Where tiene una condición 'igual a alguna constante'? (en este caso 100 es la constante)

Ejemplo:


SELECT t1.ID, t.* 
FROM (select * from SybaseTable where ID=1) t, SqlServerTable t1
WHERE t1.ID *= 100 and t1.SeqNo *= t.SeqNo

En este caso, quiero todos los registros de la tabla derivada 't', incluso si 't1' no tiene coincidencia. Quiero que t1.ID devuelva NULL en la cláusula Select cuando una fila coincidente en SeqNo no exista en 't'.

El error que recibo es "Ambos términos de una combinación externa deben contener columnas".

Estoy ejecutando esta consulta en SQL Server 2005 por ahora, pero eventualmente se usará contra una implementación de Sybase, que requiere la sintaxis de unión anterior.

gracias de antemano

¿Fue útil?

Solución

Creo que esto lo hará, pero tendrás que probar para estar seguro:

SELECT t1.ID, t.* 
FROM (select * from SybaseTable where ID=1) t, SqlServerTable t1
WHERE t.SeqNo *= t1.SeqNo AND 100 *= t1.ID

Observe que invertí el orden en la parte SeqNo, para indicar mejor cuál es el lado izquierdo de la unión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top