MySQL - ejercicio en mysql (sin subconsultas)

 
Vista:

ejercicio en mysql (sin subconsultas)

Publicado por TeenSpirits (8 intervenciones) el 08/04/2006 00:00:26
Tengo dos tablas: socios y cuotas. En la tabla Socios tengo el nombre de los socios con la fecha de baja (si es que estan dados de baja) y sin fecha de baja (si es que no estan dados de baja).
Y en la tabla cuotas tengo los nombres de los socios y las cantidades mensuales que van pagando.

Tengo que sacar un listado de todas las cuotas de los socios que no estén dados de baja.
Esto se haría muy facilmente con una subconsulta de esta manera:

select nombre from cuotas where nombre in (select nombre from cuotas where fecha_baja is not null);

pero por desgracia la versión de Mysql con la que estoy trabajando no admite subconsultas. Entonces no tengo ni idea de cómo puedo hacerlo. Lo que si estoy seguro es de que sepuede pues es un ejercicio que tengo que hacer para un cursillo. alguien sabe cómo se hace (sin subconsultas=?

un saludo a todos y gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ejercicio en mysql (sin subconsultas)

Publicado por Esteban (380 intervenciones) el 10/04/2006 21:56:51
No quiero caer mal, pero esa forma con subconsultas es la más mala forma de hacer ese query, perfectamente se puede hacer en un solo select sin subconsultas.

select lo_que_necesitas from las_tablas_en_cuestión where la_codición_exacta

Con solo eso ya lo tienes, es solo de intentarlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejercicio en mysql (sin subconsultas)

Publicado por TeenSpirits (8 intervenciones) el 10/04/2006 23:53:44
por lo de caer mal, todo lo contrario, yo lo que busco es ayuda. Te agradezco tu respuesta.

Tengo que comentar que me he equivocado en la orden. La subconsulta correcta sería esta:

select cantidad_pagada from cuotas where nombre in (select nombre from cuotas where fecha_baja is not null);

Para explicarme mejor:

Tengo dos tablas:tal que así:

Cuotas: Nombre Cantidad
Socios: Nombre Fecha_baja

Entonces lo que debo es encontrar todos los campos "Cantidad" de los socios que no tengan "Fecha_de_baja". Para esto no se me ocurre otra manera de hacerlo que no sea una subconsulta pero tiene que haberla pues el ejercicio lo pide.

saludos otra vez.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejercicio en mysql (sin subconsultas)

Publicado por Esteban (380 intervenciones) el 12/04/2006 19:05:03
Tu opción es esta:
select cantidad_pagada from cuotas where nombre in (select nombre from cuotas where fecha_baja is not null);

Sin subconsulta es de esta forma:
select cantidad_pagada from cuotas where fecha_baja is not null;

Es prácticamente un atentado contra el redimiento de la BD y de la aplicación lanzar ese tipo de consultas, si vas a usar la misma tabla, creo que solo en caso que tengas un "not in" en la condición de "where", mira la opción que te paso yo, tengo una BD donde existe una tabla la cual tiene fechas, y de acuerdo con los datos, puedo tomar los valores con una consulta similar a la que te he puesto de ejemplo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejercicio en mysql (sin subconsultas)

Publicado por TeenSpirits (8 intervenciones) el 13/04/2006 00:01:01
es que me he equivocado. no es de la misma tabla (si no está claro que no tendría sentido).

Sería así:

select cuota_pagada from cuotas where id_socio in (select id_socio from socios where fecha baja is not null);

tienes alguna opción para ésto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejercicio en mysql (sin subconsultas)

Publicado por Esteban (380 intervenciones) el 15/04/2006 17:46:47
Es exactamente la misma, solo debes siempre agregar las 2 tablas en el "from".

En realidad, esa es una consulta simple, si quieres hacer selects anidados ya quiere decir que puedes dominar una sin anidación, una consulta anidada solo puede funcionar si vas a sacar los que no estén en la condición.

Por eso este algoritmo funciona a la perfección con tu select:
select lo_que_necesitas from las_tablas_en_cuestión where la_codición_exacta.

O es que acaso estás esperando que te dé la respuesta en charola de plata. No señor, debes estudiar e investigar, solo así puedes llegar a ser experto, debes aprender a interpretar lo que te damos.

Yo no he llegado hasta donde estoy preguntando cosas básicas, sino que lo he buscado en otros sitios, los ejemplos de programación en http://www.planet-source-code.com, lo demás, a pura práctica.

Aplica el algoritmo, analízalo, desármalo y re-ármalo, solo así puedes ver la verdadera solución.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejercicio en mysql (sin subconsultas)

Publicado por TeenSpirits (8 intervenciones) el 15/04/2006 23:11:32
bueno, aunque te agradezco mucho que me hayas respondido, creo que lo que me dices no tiene nada que ver con lo que yo he preguntado (sin ánimo ninguno de ofender).

Voy a explicarlo una vez más aún arriesgándome a ser pesado.
Tengo dos tablas con sus respectivos campos:

socios:id_socio,fecha_baja
cuotas:id_socio,cuota_pagada

Tengo que obtener las cuotas pagadas por los socios que no están dados de baja (sin subconsultas). Si estuviesen disponibles las subconsultas no me cabe ninguna duda de que la query sería ésta:

select cuota_pagada from cuotas where id_socio in (select id_socio from socios where fecha_baja is not null);

lo que tú me dices es una consulta normal y corriente.

Te animo a que me des la respuesta, sólo por demostrar que estás en lo cierto. Aunque creo que hay una solución dudo mucho de que sea la que tú me dás. Es más te puedo decir que me dá la sensación de que no se puede hacer sin subconsultas. Si no fuese así tendré que reconocer que no tengo ni idea (pero sospecho que estoy en lo cierto).

Un cordial saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Solo por esta vez

Publicado por Esteban (380 intervenciones) el 18/04/2006 06:32:20
Solo por esta vez voy a darte la respuesta, mira si es fácil el asunto, y aún no entiendo el porqué no has logrado nada:

Tu solución:
select cuota_pagada from cuotas where id_socio in (select id_socio from socios where fecha_baja is not null);

Mi solución:
select lo_que_necesitas from las_tablas_en_cuestión where la_codición_exacta;

Reemplazando mi solución:
select cuota_pagada
from coutas, socios
where cuotas.id_socio = socios.id_socio
and fecha_baja is not null;

Simple, por eso te dije ARMALO, DESARMALO Y RE-ARMALO, solo así se aprende.

No pongas en duda lo que los que ya tenemos rato sabemos, y aunque hace 9 años fui novato igual que tú, yo me preocupé por las preguntas de peso, no las de este tipo.

BUSCA SIEMPRE MEJORAR LA LÓGICA, OPTIMIZA TUS PROCESOS ANTES DE PROGRAMARLOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Solo por esta vez

Publicado por TeenSpirits (8 intervenciones) el 18/04/2006 21:57:37
muchas gracias, confieso que desconocía lo de "cuotas.id_socio = socios.id_socio". Bueno y devo darte la razón evidentemente.

saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar