Consulta left outer join

13/05/2008 - 20:58 por raul | Informe spam
Hola foreros,

Siempre me ha costado coger el concepto de los left outer join, cuando creía
enternderlo creía que podría funcionar esto:

tablas,

clientes, albaranes, lineas y articulos

mi problema es q quiero poder seguir viendo los albaranes aunque se hayan
borrado los articulos de la tabla.

( vale, vale, se que no se deben borrar articulos y tb que no se deben
guardar los conceptos de los articulos en las lineas del albaran,
perooooo , hay q trabajar con lo que tenemos. )

select *

from clientes, albaranes,lineas, articulos

where cliente.numero=albaran.cliente
and lineas.albaran=albaran.numero
and articulos.nombre=lineas.concepto
and cliente.tarifa=articulos.tarifa


Hasta aqui, bien, el problema es cuando se borra algun articulo he probado
con algo como

select *

from clientes, albaranes,
lineas left outer join articulos on articulos.nombre=lineas.concepto

where cliente.numero=albaran.cliente
and lineas.albaran=albaran.numero
and cliente.tarifa=articulos.tarifa




y sigue sin mostrarme las lineas de albaran que contienen un concepto que ya
no está en la lista de articulos.


¿ Podeis echarme un capote ??

no soy capaz

gracias de antemano.

raul.

Preguntas similare

Leer las respuestas

#1 Maxi
13/05/2008 - 21:31 | Informe spam
Raul, usted no se porque esta mezclando el viejo ansi con el nuevo en sus
consultas (where tablas1.campo = tabla2.campo)

Si quiere ver los albaranes entonces (sin probar con su modelo ni datos)
pruebe algo asi

select * albaranes
left join
cliente on
cliente.numero=albaran.cliente
left join
lineas on
lineas.albaran=albaran.numero
left join
articulos on
articulos.nombre=lineas.concepto
and
cliente.tarifa=articulos.tarifa










Salu2

Microsoft MVP SQL Server
Culminis Speaker
www.sqltotalconsulting.com

"raul" escribió en el mensaje
news:
Hola foreros,

Siempre me ha costado coger el concepto de los left outer join, cuando
creía enternderlo creía que podría funcionar esto:

tablas,

clientes, albaranes, lineas y articulos

mi problema es q quiero poder seguir viendo los albaranes aunque se hayan
borrado los articulos de la tabla.

( vale, vale, se que no se deben borrar articulos y tb que no se deben
guardar los conceptos de los articulos en las lineas del albaran,
perooooo , hay q trabajar con lo que tenemos. )

select *

from clientes, albaranes,lineas, articulos

where cliente.numero=albaran.cliente
and lineas.albaran=albaran.numero
and articulos.nombre=lineas.concepto
and cliente.tarifa=articulos.tarifa


Hasta aqui, bien, el problema es cuando se borra algun articulo he probado
con algo como

select *

from clientes, albaranes,
lineas left outer join articulos on articulos.nombre=lineas.concepto

where cliente.numero=albaran.cliente
and lineas.albaran=albaran.numero
and cliente.tarifa=articulos.tarifa




y sigue sin mostrarme las lineas de albaran que contienen un concepto que
ya no está en la lista de articulos.


¿ Podeis echarme un capote ??

no soy capaz

gracias de antemano.

raul.





Respuesta Responder a este mensaje
#2 Alejandro Mesa
13/05/2008 - 21:34 | Informe spam
raul,

Estas cerca. Lo que pasa es que estas mezclando la union entre el uso de la
clausula FROM y la clausula WHERE. Al usar la clausula WHERE, estas filtrando
el resultado final de las uniones.

select *
from
albaranes as al
inner join
(
lineas as l
left outer join
articulos as a
on a.nombre = l.concepto
)
l.albaran = al.numero
left outer join
cliente
c.numero=al.cliente
and cliente.tarifa=articulos.tarifa
GO

En este caso se necesita usar dos OUTER JOINS, el uno entre lineas y
articulos, y el otro entre cliente y articulos.


AMB

Hola foreros,

Siempre me ha costado coger el concepto de los left outer join, cuando creía
enternderlo creía que podría funcionar esto:

tablas,

clientes, albaranes, lineas y articulos

mi problema es q quiero poder seguir viendo los albaranes aunque se hayan
borrado los articulos de la tabla.

( vale, vale, se que no se deben borrar articulos y tb que no se deben
guardar los conceptos de los articulos en las lineas del albaran,
perooooo , hay q trabajar con lo que tenemos. )

select *

from clientes, albaranes,lineas, articulos

where cliente.numero=albaran.cliente
and lineas.albaran=albaran.numero
and articulos.nombre=lineas.concepto
and cliente.tarifa=articulos.tarifa


Hasta aqui, bien, el problema es cuando se borra algun articulo he probado
con algo como

select *

from clientes, albaranes,
lineas left outer join articulos on articulos.nombre=lineas.concepto

where cliente.numero=albaran.cliente
and lineas.albaran=albaran.numero
and cliente.tarifa=articulos.tarifa




y sigue sin mostrarme las lineas de albaran que contienen un concepto que ya
no está en la lista de articulos.


¿ Podeis echarme un capote ??

no soy capaz

gracias de antemano.

raul.






Respuesta Responder a este mensaje
#3 Petercito
14/05/2008 - 21:02 | Informe spam
Hola:

De lo que veo en lineas tienes el concepto del producto, entonces no veo la
necesidad de juntarle con la tabla productos para traer el concepto
Pedro Calapi


"Maxi" wrote:

Raul, usted no se porque esta mezclando el viejo ansi con el nuevo en sus
consultas (where tablas1.campo = tabla2.campo)

Si quiere ver los albaranes entonces (sin probar con su modelo ni datos)
pruebe algo asi

select * albaranes
left join
cliente on
cliente.numero=albaran.cliente
left join
lineas on
lineas.albaran=albaran.numero
left join
articulos on
articulos.nombre=lineas.concepto
and
cliente.tarifa=articulos.tarifa










Salu2

Microsoft MVP SQL Server
Culminis Speaker
www.sqltotalconsulting.com

"raul" escribió en el mensaje
news:
> Hola foreros,
>
> Siempre me ha costado coger el concepto de los left outer join, cuando
> creía enternderlo creía que podría funcionar esto:
>
> tablas,
>
> clientes, albaranes, lineas y articulos
>
> mi problema es q quiero poder seguir viendo los albaranes aunque se hayan
> borrado los articulos de la tabla.
>
> ( vale, vale, se que no se deben borrar articulos y tb que no se deben
> guardar los conceptos de los articulos en las lineas del albaran,
> perooooo , hay q trabajar con lo que tenemos. )
>
> select *
>
> from clientes, albaranes,lineas, articulos
>
> where cliente.numero=albaran.cliente
> and lineas.albaran=albaran.numero
> and articulos.nombre=lineas.concepto
> and cliente.tarifa=articulos.tarifa
>
>
> Hasta aqui, bien, el problema es cuando se borra algun articulo he probado
> con algo como
>
> select *
>
> from clientes, albaranes,
> lineas left outer join articulos on articulos.nombre=lineas.concepto
>
> where cliente.numero=albaran.cliente
> and lineas.albaran=albaran.numero
> and cliente.tarifa=articulos.tarifa
>
>
>
>
> y sigue sin mostrarme las lineas de albaran que contienen un concepto que
> ya no está en la lista de articulos.
>
>
> ¿ Podeis echarme un capote ??
>
> no soy capaz
>
> gracias de antemano.
>
> raul.
>
>
>
>
>



Respuesta Responder a este mensaje
#4 raul
17/05/2008 - 10:34 | Informe spam
En primer lugar gracias a todos,

Maxi, mezclo el antiguo ansi con el nuevo por desconocimiento, ( siempre
trabajo con el antiguo pero he necesitado de estas ordenes del nuevo y las
he mezclado, creo q tu respuesta me aclara bastante )

Petercito, Ya comento en mi post que estoy trabajando con una BBDD con
algunos fallos de diseño, ese es uno guardar el texto del concepto en la
linea, luego de la tabla de conceptos necesito algunos campos como , el peso
del producto, el numero de orden en que se imprimen en el albaran, el grupo
al que pertenecen, etc..

Alejandro, ese era mi problema el where final, tras mucho probar he dado con
ello, gracias a vuestros consejos,

Al final la consuta me ha quedado algo así como:

Select ..
FROM t_albaran INNER JOIN t_clientes ON t_albaran.Cliente_alb =
t_clientes.Id_cli INNER JOIN t_lineaalbaran ON t_albaran.Numero_alb =
t_lineaalbaran.Nalba_pre INNER JOIN t_albaranentradas ON
t_albaran.albaranentradas_alb = t_albaranentradas.Numero_alb INNER JOIN
t_LineaAlbaranEntradas ON t_albaranentradas.Numero_alb =
t_LineaAlbaranEntradas.Nalba_pre AND t_lineaalbaran.Concepto_lin =
t_LineaAlbaranEntradas.Concepto_lin LEFT OUTER JOIN t_prendas ON
t_lineaalbaran.Concepto_lin = t_prendas.Nombre_pre AND t_clientes.Tarifa_cli
= t_prendas.Tarifa_pre
Where (t_albaran.Numero_alb @50) and t_albaran.emp_alb= 1

Gracias,



Alejandro, llevas razón estaba filtrando los resultados, la consulta ha
quedado
"raul" escribió en el mensaje
news:
Hola foreros,

Siempre me ha costado coger el concepto de los left outer join, cuando
creía enternderlo creía que podría funcionar esto:

tablas,

clientes, albaranes, lineas y articulos

mi problema es q quiero poder seguir viendo los albaranes aunque se hayan
borrado los articulos de la tabla.

( vale, vale, se que no se deben borrar articulos y tb que no se deben
guardar los conceptos de los articulos en las lineas del albaran,
perooooo , hay q trabajar con lo que tenemos. )

select *

from clientes, albaranes,lineas, articulos

where cliente.numero=albaran.cliente
and lineas.albaran=albaran.numero
and articulos.nombre=lineas.concepto
and cliente.tarifa=articulos.tarifa


Hasta aqui, bien, el problema es cuando se borra algun articulo he probado
con algo como

select *

from clientes, albaranes,
lineas left outer join articulos on articulos.nombre=lineas.concepto

where cliente.numero=albaran.cliente
and lineas.albaran=albaran.numero
and cliente.tarifa=articulos.tarifa




y sigue sin mostrarme las lineas de albaran que contienen un concepto que
ya no está en la lista de articulos.


¿ Podeis echarme un capote ??

no soy capaz

gracias de antemano.

raul.





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