Consultas con Left Outer Join

10/01/2007 - 17:39 por Natty | Informe spam
Hola a todos:

Les comento que tengo una vista, donde se realiza una consulta con Left
outer join en SQl Anywhere donde funciona bien, sin embargo como
estamos migrando a SQL express 2005, me encontre que este último es
muy estricto ya que por ejemplo en Anywhere permitia lo siguiente:
Dentro de un LEFT OUTER JOIN poder realizar la condición con otra
tabla declarada fuera del OUTER JOIN pero dentro del FROM como sigue:

Select .
FROM
dba.cli,
dba.tabla2,
dba.tabla3,
dba.tpo_serv left outer join
dba.corporat on
cli.id_corporat = corporat.id_corporat


Y ahora en SQL Express 2005 no lo permite, habrá alguna forma de
realizarlo?? ya intente dos forma diferentes pero ninguna me devuelve
los valores que necesito, les pego la consulta que tengo en SQL
Anywhere:


FROM
dba.nc,
dba.deta_nc,
dba.cli,
dba.vende as tit,
dba.prov_tpo,
dba.suc as suc_nc,
dba.provee,
dba.tpo_serv left outer join
dba.corporat on
cli.id_corporat = corporat.id_corporat left outer join
dba.cen_cos on
nc.id_cencos = cen_cos.id_cencos and
nc.id_cli = cen_cos.id_cli left outer join
dba.depto on
nc.id_depto =depto.id_depto and
nc.id_cencos = depto.id_cencos and
nc.id_cli = depto.id_cli left outer join
dba.vend as aux on
nc.id_vendaux = aux.id_vend left outer join
dba.conce_bol on
prov_tpo_serv.id_provee = conce_bol.id_provee and
deta_nc.det_nc_bol = conce_bol.bol and
deta_nc.id_suc =conce_bol.id_suc left outer join
dba.suc as sucfa on
nc.id_suc_fac = sucfa.id_suc

WHERE

nc.nc_num =deta_nc.nc_num and
nc.id_se = deta_nc.se and
nc.id_suc = deta_nc.id_suc and
nc.estado = 1 and
nc.id_cli = cli.id_cli and
nc.id_vend = tit.id_vende and
deta_nc.prov_tpo = prov_tpo.prov_tpo and
nc.id_suc = suc_nc.id_suc and
prov_tpo.id_provee = provee.id_provee and
prov_tpo.id_serv = tpo_serv.id_tpo_serv



Espero me puedan ayudar
Gracias por todo y les mando un saludo

Att. Natty

Preguntas similare

Leer las respuestas

#1 Jose Mariano Alvarez
10/01/2007 - 19:42 | Informe spam
Debes pasar la condicion del join que esta en el where al join.

Ejemplo

<tabla 1>
JOIN <tabla 2> ON <condicion del join>
JOIN <tabla 3> ON <condicion del join>



Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Natty" wrote in message
news:
Hola a todos:

Les comento que tengo una vista, donde se realiza una consulta con Left
outer join en SQl Anywhere donde funciona bien, sin embargo como
estamos migrando a SQL express 2005, me encontre que este último es
muy estricto ya que por ejemplo en Anywhere permitia lo siguiente:
Dentro de un LEFT OUTER JOIN poder realizar la condición con otra
tabla declarada fuera del OUTER JOIN pero dentro del FROM como sigue:

Select .
FROM
dba.cli,
dba.tabla2,
dba.tabla3,
dba.tpo_serv left outer join
dba.corporat on
cli.id_corporat = corporat.id_corporat


Y ahora en SQL Express 2005 no lo permite, habrá alguna forma de
realizarlo?? ya intente dos forma diferentes pero ninguna me devuelve
los valores que necesito, les pego la consulta que tengo en SQL
Anywhere:


FROM
dba.nc,
dba.deta_nc,
dba.cli,
dba.vende as tit,
dba.prov_tpo,
dba.suc as suc_nc,
dba.provee,
dba.tpo_serv left outer join
dba.corporat on
cli.id_corporat = corporat.id_corporat left outer join
dba.cen_cos on
nc.id_cencos = cen_cos.id_cencos and
nc.id_cli = cen_cos.id_cli left outer join
dba.depto on
nc.id_depto =depto.id_depto and
nc.id_cencos = depto.id_cencos and
nc.id_cli = depto.id_cli left outer join
dba.vend as aux on
nc.id_vendaux = aux.id_vend left outer join
dba.conce_bol on
prov_tpo_serv.id_provee = conce_bol.id_provee and
deta_nc.det_nc_bol = conce_bol.bol and
deta_nc.id_suc =conce_bol.id_suc left outer join
dba.suc as sucfa on
nc.id_suc_fac = sucfa.id_suc

WHERE

nc.nc_num =deta_nc.nc_num and
nc.id_se = deta_nc.se and
nc.id_suc = deta_nc.id_suc and
nc.estado = 1 and
nc.id_cli = cli.id_cli and
nc.id_vend = tit.id_vende and
deta_nc.prov_tpo = prov_tpo.prov_tpo and
nc.id_suc = suc_nc.id_suc and
prov_tpo.id_provee = provee.id_provee and
prov_tpo.id_serv = tpo_serv.id_tpo_serv



Espero me puedan ayudar
Gracias por todo y les mando un saludo

Att. Natty
Respuesta Responder a este mensaje
#2 Maxi
11/01/2007 - 14:51 | Informe spam
Natty, el tema es asi, vos no estas usando LEFT de SQL sino el viejo metodo
*= en el WHERE, esto ya desde hace varias versiones atras se recomendaba (y
los libros on line tambien lo indicaban) que no era la forma correcta de
trabajar y que podrian en futures versiones sacar esta compatibilidad.
En 2005 ya no es mas compatible hacer los left , full o right join asi! vas
a tener que reescribir y dejar de usar el where por el LEFT

por ej

SELECT * FROM CLIENTES LEFT JOIN PEDIDOS ON
CLIENTES.ID = PEDIDOS.CLIENTE_ID



Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Natty" escribió en el mensaje
news:
Hola a todos:

Les comento que tengo una vista, donde se realiza una consulta con Left
outer join en SQl Anywhere donde funciona bien, sin embargo como
estamos migrando a SQL express 2005, me encontre que este último es
muy estricto ya que por ejemplo en Anywhere permitia lo siguiente:
Dentro de un LEFT OUTER JOIN poder realizar la condición con otra
tabla declarada fuera del OUTER JOIN pero dentro del FROM como sigue:

Select .
FROM
dba.cli,
dba.tabla2,
dba.tabla3,
dba.tpo_serv left outer join
dba.corporat on
cli.id_corporat = corporat.id_corporat


Y ahora en SQL Express 2005 no lo permite, habrá alguna forma de
realizarlo?? ya intente dos forma diferentes pero ninguna me devuelve
los valores que necesito, les pego la consulta que tengo en SQL
Anywhere:


FROM
dba.nc,
dba.deta_nc,
dba.cli,
dba.vende as tit,
dba.prov_tpo,
dba.suc as suc_nc,
dba.provee,
dba.tpo_serv left outer join
dba.corporat on
cli.id_corporat = corporat.id_corporat left outer join
dba.cen_cos on
nc.id_cencos = cen_cos.id_cencos and
nc.id_cli = cen_cos.id_cli left outer join
dba.depto on
nc.id_depto =depto.id_depto and
nc.id_cencos = depto.id_cencos and
nc.id_cli = depto.id_cli left outer join
dba.vend as aux on
nc.id_vendaux = aux.id_vend left outer join
dba.conce_bol on
prov_tpo_serv.id_provee = conce_bol.id_provee and
deta_nc.det_nc_bol = conce_bol.bol and
deta_nc.id_suc =conce_bol.id_suc left outer join
dba.suc as sucfa on
nc.id_suc_fac = sucfa.id_suc

WHERE

nc.nc_num =deta_nc.nc_num and
nc.id_se = deta_nc.se and
nc.id_suc = deta_nc.id_suc and
nc.estado = 1 and
nc.id_cli = cli.id_cli and
nc.id_vend = tit.id_vende and
deta_nc.prov_tpo = prov_tpo.prov_tpo and
nc.id_suc = suc_nc.id_suc and
prov_tpo.id_provee = provee.id_provee and
prov_tpo.id_serv = tpo_serv.id_tpo_serv



Espero me puedan ayudar
Gracias por todo y les mando un saludo

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