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

#6 José Antonio
25/05/2005 - 14:07 | Informe spam
Es eso, pero puede ser que quiera excluir los pisos que contengan mas de un
recibo.

Como seria el select si quiero escluir los pisos que contengan los recibos
10,.11 y 12?

Saludos

"Alejandro Mesa" escribió en el
mensaje news:
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
#7 Alejandro Mesa
25/05/2005 - 14:19 | Informe spam
Trata:

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


AMB

"José Antonio" wrote:

Es eso, pero puede ser que quiera excluir los pisos que contengan mas de un
recibo.

Como seria el select si quiero escluir los pisos que contengan los recibos
10,.11 y 12?

Saludos

"Alejandro Mesa" escribió en el
mensaje news:
> 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
#8 José Antonio
25/05/2005 - 15:02 | Informe spam
Ok. Gracias a todos.
"Alejandro Mesa" escribió en el
mensaje news:
Trata:

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


AMB

"José Antonio" wrote:

Es eso, pero puede ser que quiera excluir los pisos que contengan mas de
un
recibo.

Como seria el select si quiero escluir los pisos que contengan los
recibos
10,.11 y 12?

Saludos

"Alejandro Mesa" escribió en el
mensaje news:
> 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
#9 klunin
25/05/2005 - 15:36 | Informe spam
haber depues de leer todas estas exposiciones logré entender lo que quieres
hacer tu estas buscando como hacer
idrecibo in (10, 11, 12, .) puede ser uno o más
tuve el mismo problema bueno en mi caso como era una tabla que no implicaba
muchas filas lo que hice fue construir la consulta sql segun (en tu caso el
"idrecibo") se seleccione para mostrar la consulta y luego hacia
Conexion.Execute "sentencia SQL" y pues me resultó, pero algo leí sobre los
Create function, si quieres salir rápido del problema te recomiendo lo que
hice o puedes buscar mas ayuda acerca de las funciones en SQL, si consigues
como hacerlo con los function me pasas el dato , pq no
encontré ayuda acerca de como hacer lo que pides desde una simple consulta.

GYG

"Jose Antonio" escribió:

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
#10 Jose Antonio
25/05/2005 - 18:52 | Informe spam
Una pregunta:

Es normal que con la subconsulta el select sea un poco mas lento que con el
join?

Saludos
"José Antonio" escribió en el
mensaje news:
Ok. Gracias a todos.
"Alejandro Mesa" escribió en el
mensaje news:
Trata:

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


AMB

"José Antonio" wrote:

Es eso, pero puede ser que quiera excluir los pisos que contengan mas
de un
recibo.

Como seria el select si quiero escluir los pisos que contengan los
recibos
10,.11 y 12?

Saludos

"Alejandro Mesa" escribió en
el
mensaje news:
> 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 AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida