Extraño plan ejecución

25/08/2006 - 12:19 por Alvaro Mosquera | Informe spam
¿ Por qué en una query que tiene un left join, el plan de ejecución ejecuta
un inner join ?.
Obviamente los resultados no son los correctos.

Adjunto la query y el plan de ejecución.

La query

select c.codigoproducto,d.codigoproducto
from componentes c
left outer join historicodosificaciones d on c.codigoformula =
d.codigoformula and c.extension = d.extension and
c.codigoproducto = d.codigoproducto
where c.codigoformula = '412761' and c.extension = '6150' and d.diario =
'24/08/2006' and d.nromezcladia = 107

Plan de ejecución

|--Hash Match(Inner Join,
HASH:([d].[CodigoProducto])=([c].[CodigoProducto]),
RESIDUAL:([d].[CodigoProducto]=[c].[CodigoProducto]))
|--Clustered Index
Seek(OBJECT:([Trazas].[dbo].[HistoricoDosificaciones].[IX_HistoricoDosificaciones]
AS [d]), SEEK:([d].[Diario]='Ago 24 2006 12:00AM' AND
[d].[NroMezclaDia]7), WHERE:([d].[Extension]='6150' AND
[d].[CodigoFormula]='412761') ORDERED FORWARD)
|--Clustered Index
Scan(OBJECT:([Trazas].[dbo].[Componentes].[PK_Componentes] AS [c]),
WHERE:([c].[CodigoFormula]='412761' AND [c].[Extension]='6150'))

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
25/08/2006 - 22:31 | Informe spam
Hola Eladio,

Tu respuesta fue:

Mostrar la cita
Coincido contigo en esto.

Mostrar la cita
No concuerdo con esto.

El filtro debe pasarlo junto al "join" y no en la clausula "where". Si es
que el espera ver las filas como indique.

Mostrar la cita
Se me fue (copy y paste). Debio ser:

set showplan_text on
go

select
oh.*, od.*
from
dbo.orders as oh
inner join
dbo.[order details] as od
on oh.orderid = od.orderid
where
od.orderid = 10250

select
oh.*, od.*
from
dbo.orders as oh
inner join
dbo.[order details] as od
on oh.orderid = od.orderid
and od.orderid = 10250
go

De todas maneras puedes chequear que el plan de ejecucion sera el mismo sin
importar donde pones el filtro extra (od.orderid = 10250), puedes ponerlo en
el join o en la clausula "where". Lo mismo no aplica cuando usamos "outer
joins".


Saludos,

Alejandro Mesa

"Eladio Rincón" wrote:

Mostrar la cita
#7 Alvaro Mosquera
28/08/2006 - 08:21 | Informe spam
Lo resultados no son correctos porque la tabla componentes tiene un registro
que no existe en historicodosificaciones y al transformarse la query en un
inner join, no lo devuelve.

"Alejandro Mesa" escribió:

Mostrar la cita
Ads by Google
Search Busqueda sugerida