Como hacer inner join que devuelve varias filas.

24/05/2005 - 22:49 por Jose Antonio | Informe spam
Hola grupo.

Tengo un problema con una sentencia select que se me resiste y no logro dar
con una solucion adecuada:

Tengo una tabla pisos con el codigo y la descripción, otra de Recibos con el
codigo y la descripcion.

En otra tabla lineasrecibos tengo los diferentes recibos que paga cada uno
de los pisos, de esta forma:

Pisos: idpiso int
descripcion varchar(30)


Recibos: idrecibo int
detalle varchar(40)
importe decimal(10,2)

Lineasrecibos: idpiso int
idrecibo int

cada piso tiene varias lineas en Linearecibos porque todos pagan mas de un
recibo.

En ocasiones tengo que realizar un select en el que se detalle informacion
con exclusion de uno o mas recibos.

yo hago el select asi:

select idpiso,descripcion from pisos join (select idpiso from lineasrecibos
where idrecibo not in(10)) r on r.idpiso=idpiso.

no me funciona porque si un piso paga el recibo 10 y el recibo 12 me sale la
linea del recibo 12 y necesito que si esta excluido en el in, aunque tenga
otros recibos no salga.


Saludos y gracias.

Preguntas similare

Leer las respuestas

#1 Eleazar
24/05/2005 - 23:18 | Informe spam
hola
puedes ser mas claro
esta condicion idrecibo not in(10) es lo mismo que idrecibo != 10
por lo tanto el 12 siempre te lo va a mostrar (y cualquier recibo diferente
de 10)
oki

Nota: cual es la ventaja (en este query ) de usar tabla derivada?, en el
asunto Ayuda con consulta INTERSECT please. comentan que tiene un gran
performance

"Jose Antonio" escribió en el mensaje
news:u%
Hola grupo.

Tengo un problema con una sentencia select que se me resiste y no logro


dar
con una solucion adecuada:

Tengo una tabla pisos con el codigo y la descripción, otra de Recibos con


el
codigo y la descripcion.

En otra tabla lineasrecibos tengo los diferentes recibos que paga cada uno
de los pisos, de esta forma:

Pisos: idpiso int
descripcion varchar(30)


Recibos: idrecibo int
detalle varchar(40)
importe decimal(10,2)

Lineasrecibos: idpiso int
idrecibo int

cada piso tiene varias lineas en Linearecibos porque todos pagan mas de un
recibo.

En ocasiones tengo que realizar un select en el que se detalle informacion
con exclusion de uno o mas recibos.

yo hago el select asi:

select idpiso,descripcion from pisos join (select idpiso from


lineasrecibos
where idrecibo not in(10)) r on r.idpiso=idpiso.

no me funciona porque si un piso paga el recibo 10 y el recibo 12 me sale


la
linea del recibo 12 y necesito que si esta excluido en el in, aunque tenga
otros recibos no salga.


Saludos y gracias.




Respuesta Responder a este mensaje
#2 Manuel Etcheto
25/05/2005 - 01:26 | Informe spam
Hola
No se si entendí bien, sería

select P.idpiso, P.descripcion from dbo.pisos P
join lineasrecibos L
ON P.idpiso = L.idpiso
where L.idrecibo <> 10 -- o (not in (9, 10,..) )

Suerte
Manuel

Jose Antonio escribió en el mensaje de noticias
u#
Hola grupo.

Tengo un problema con una sentencia select que se me resiste y no logro


dar
con una solucion adecuada:

Tengo una tabla pisos con el codigo y la descripción, otra de Recibos con


el
codigo y la descripcion.

En otra tabla lineasrecibos tengo los diferentes recibos que paga cada uno
de los pisos, de esta forma:

Pisos: idpiso int
descripcion varchar(30)


Recibos: idrecibo int
detalle varchar(40)
importe decimal(10,2)

Lineasrecibos: idpiso int
idrecibo int

cada piso tiene varias lineas en Linearecibos porque todos pagan mas de un
recibo.

En ocasiones tengo que realizar un select en el que se detalle informacion
con exclusion de uno o mas recibos.

yo hago el select asi:

select idpiso,descripcion from pisos join (select idpiso from


lineasrecibos
where idrecibo not in(10)) r on r.idpiso=idpiso.

no me funciona porque si un piso paga el recibo 10 y el recibo 12 me sale


la
linea del recibo 12 y necesito que si esta excluido en el in, aunque tenga
otros recibos no salga.


Saludos y gracias.




Respuesta Responder a este mensaje
#3 José Antonio
25/05/2005 - 08:17 | Informe spam
Que es eso de INTERSECT?, en sql2000 no existe.

"Eleazar" escribió en el mensaje
news:%
hola
puedes ser mas claro
esta condicion idrecibo not in(10) es lo mismo que idrecibo != 10
por lo tanto el 12 siempre te lo va a mostrar (y cualquier recibo
diferente
de 10)
oki

Nota: cual es la ventaja (en este query ) de usar tabla derivada?, en el
asunto Ayuda con consulta INTERSECT please. comentan que tiene un gran
performance

"Jose Antonio" escribió en el mensaje
news:u%
Hola grupo.

Tengo un problema con una sentencia select que se me resiste y no logro


dar
con una solucion adecuada:

Tengo una tabla pisos con el codigo y la descripción, otra de Recibos con


el
codigo y la descripcion.

En otra tabla lineasrecibos tengo los diferentes recibos que paga cada
uno
de los pisos, de esta forma:

Pisos: idpiso int
descripcion varchar(30)


Recibos: idrecibo int
detalle varchar(40)
importe decimal(10,2)

Lineasrecibos: idpiso int
idrecibo int

cada piso tiene varias lineas en Linearecibos porque todos pagan mas de
un
recibo.

En ocasiones tengo que realizar un select en el que se detalle
informacion
con exclusion de uno o mas recibos.

yo hago el select asi:

select idpiso,descripcion from pisos join (select idpiso from


lineasrecibos
where idrecibo not in(10)) r on r.idpiso=idpiso.

no me funciona porque si un piso paga el recibo 10 y el recibo 12 me sale


la
linea del recibo 12 y necesito que si esta excluido en el in, aunque
tenga
otros recibos no salga.


Saludos y gracias.








Respuesta Responder a este mensaje
#4 José Antonio
25/05/2005 - 08:18 | Informe spam
la consulta es con el (not in (9, 10,..) )
porque puede haber varias exclusiones.

Jose Antonio.

"Manuel Etcheto" escribió en el
mensaje news:%
Hola
No se si entendí bien, sería

select P.idpiso, P.descripcion from dbo.pisos P
join lineasrecibos L
ON P.idpiso = L.idpiso
where L.idrecibo <> 10 -- o (not in (9, 10,..) )

Suerte
Manuel

Jose Antonio escribió en el mensaje de
noticias
u#
Hola grupo.

Tengo un problema con una sentencia select que se me resiste y no logro


dar
con una solucion adecuada:

Tengo una tabla pisos con el codigo y la descripción, otra de Recibos con


el
codigo y la descripcion.

En otra tabla lineasrecibos tengo los diferentes recibos que paga cada
uno
de los pisos, de esta forma:

Pisos: idpiso int
descripcion varchar(30)


Recibos: idrecibo int
detalle varchar(40)
importe decimal(10,2)

Lineasrecibos: idpiso int
idrecibo int

cada piso tiene varias lineas en Linearecibos porque todos pagan mas de
un
recibo.

En ocasiones tengo que realizar un select en el que se detalle
informacion
con exclusion de uno o mas recibos.

yo hago el select asi:

select idpiso,descripcion from pisos join (select idpiso from


lineasrecibos
where idrecibo not in(10)) r on r.idpiso=idpiso.

no me funciona porque si un piso paga el recibo 10 y el recibo 12 me sale


la
linea del recibo 12 y necesito que si esta excluido en el in, aunque
tenga
otros recibos no salga.


Saludos y gracias.








Respuesta Responder a este mensaje
#5 Alejandro Mesa
25/05/2005 - 14:00 | Informe spam
Jose Antonio,

Dejame refrasear la pregunta. Quieres excluir los pisos que contengan
determinado recibo?, si es asi, entonces usa:

select idpiso, descripcion
from pisos as p
where not exists (
select *
from lineasrecibos as l
where l.idpiso = p.idpiso and idrecibo = 10
)


AMB

"Jose Antonio" wrote:

Hola grupo.

Tengo un problema con una sentencia select que se me resiste y no logro dar
con una solucion adecuada:

Tengo una tabla pisos con el codigo y la descripción, otra de Recibos con el
codigo y la descripcion.

En otra tabla lineasrecibos tengo los diferentes recibos que paga cada uno
de los pisos, de esta forma:

Pisos: idpiso int
descripcion varchar(30)


Recibos: idrecibo int
detalle varchar(40)
importe decimal(10,2)

Lineasrecibos: idpiso int
idrecibo int

cada piso tiene varias lineas en Linearecibos porque todos pagan mas de un
recibo.

En ocasiones tengo que realizar un select en el que se detalle informacion
con exclusion de uno o mas recibos.

yo hago el select asi:

select idpiso,descripcion from pisos join (select idpiso from lineasrecibos
where idrecibo not in(10)) r on r.idpiso=idpiso.

no me funciona porque si un piso paga el recibo 10 y el recibo 12 me sale la
linea del recibo 12 y necesito que si esta excluido en el in, aunque tenga
otros recibos no salga.


Saludos y gracias.





Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida