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.
 

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.




Preguntas similares