Alejandro Mesa

03/02/2006 - 15:20 por Penta | Informe spam
Alejandro :

select
*
from
dbo.customers as c
left join
dbo.orders as oh
on c.customerid = oh.customerid
where
oh.customerid is null


Select * from
dbo.customers as c ,
dbo.orders as oh
Where c.customerid *= oh.customerid
and oh.customerid is null

Porque no da el mismo resultado ?

Siempre pense que *= estaba bien :(

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
03/02/2006 - 19:29 | Informe spam
Penta,

Cuando individualizas una pregunta, entonces te privas de que otros miembros
del grupo te puedan ayudar.

Si analizas los planes de ejecucion de ambas sentencias, te daras cuenta de
lo pasa. La primera sentencia une las tablas usando un "left join" y despues
filtra el resultado. La segunda, en cambio, hace la union de una forma que
contempla las dos expresiones como parte de la union, o sea, que las columnas
sean iguales y que ademas la columna [customerid] en la tabla [orders] sea
null. como no se cumple la union y ademas esta es "left join" entonces sql
server devuelve las 91 filas que tiene la tabla [customers].


AMB

"Penta" wrote:

Alejandro :

select
*
from
dbo.customers as c
left join
dbo.orders as oh
on c.customerid = oh.customerid
where
oh.customerid is null


Select * from
dbo.customers as c ,
dbo.orders as oh
Where c.customerid *= oh.customerid
and oh.customerid is null

Porque no da el mismo resultado ?

Siempre pense que *= estaba bien :(


Respuesta Responder a este mensaje
#2 Penta
03/02/2006 - 21:47 | Informe spam
OK, no pasara nuevamente.

Me podrias indicar un buen link donde leer al respecto ?
Ya que me maree con dicho cambio, entiendo el left y de hecho toda
consulta la estoy haciendo asi, pero no veo claramente los casos donde
*= es distinto al left, es decir, aca me diste un ejemplo, pero tengo 2
tablas donde al usar left o *= el resultado es el mismo, cual es la
diferencia en cuanto a los datos ? y porque devuelve 91 ? sorry pero ya
me enrede xD
Respuesta Responder a este mensaje
#3 Alejandro Mesa
04/02/2006 - 19:24 | Informe spam
Penta,

Mi recomendacion es que planifiques y cambies todas las sentencias que usan
el viejo estilo.

Como te dije al principio, es es una de las limitantes del viejo estilo, que
hay operaciones que se pueden hacer con "left join" que no tienen equivalente
en el viejo estilo.

(Listing 5 ANSI JOIN Syntax)
Migrating from SQL Server 6.5 to 7.0
http://www.microsoft.com/technet/pr...igrat.mspx

SQL Server - INNER JOIN vs WHERE clause
http://lists.evolt.org/archive/Week...75368.html

Outer joins demystified
http://209.34.241.67/tsql_language/archive/2004/10/28/249325.aspx


AMB

"Penta" wrote:

OK, no pasara nuevamente.

Me podrias indicar un buen link donde leer al respecto ?
Ya que me maree con dicho cambio, entiendo el left y de hecho toda
consulta la estoy haciendo asi, pero no veo claramente los casos donde
*= es distinto al left, es decir, aca me diste un ejemplo, pero tengo 2
tablas donde al usar left o *= el resultado es el mismo, cual es la
diferencia en cuanto a los datos ? y porque devuelve 91 ? sorry pero ya
me enrede xD


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida