Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Query combinando tablas

Estas en el tema de Query combinando tablas en el foro de Mysql en Foros del Web. Buenas, me veo ante un gran problema, un problema al que no llego, realmente no se si es posible llegar, a ver si resumo bien ...
  #1 (permalink)  
Antiguo 17/03/2013, 16:09
 
Fecha de Ingreso: abril-2002
Mensajes: 33
Antigüedad: 22 años
Puntos: 0
Query combinando tablas

Buenas,

me veo ante un gran problema, un problema al que no llego, realmente no se si es posible llegar, a ver si resumo bien y encuentro un genio, solo me queda poner el problema en un sitio público, y ¿que lugar mejor que aqui?

Ahi va el problema:

TABLA_A:
id_producto
descripcion_producto

TABLA_B:
id_estado_producto
id_producto (vinculo con la tabla a)
estado (reservado,liberado, vendido) donde liberado es cuando se anula una reserva
fecha_creacion

Necesito hacer un join tabla A, tabla B, pero necesito solo contar los productos disponibles:
disponible es:
- que no este en la tabla b: TABLA_B.id_producto IS NULL
- que si este en la tabla b pero que no posea los estados ni reservado ni vendido, pero ojo, puede poseer varios resgistros con el mismo id_producto

Ya he probado todo y estoy algo bloqueado, estoy pensando añadir un nuevo campo que maque si está disponible o no en la tabla_a e ir modificándolo, pero es una chapuza y me gustaría conseguirlo con una sola query.

Mi conclusión (erronea)
SELECT id_producto from
TABLA_A Left join TABLA_B on TABLA_A.id_producto=TABLA_B.id_producto
where ((TABLA_B.id_producto IS NULL) or (TABLA_B.estado!="vendido" and TABLA_B.estado!="reservado"))

El problema de esta sentencia es que me lanza igualmente resultado si hay uno liberado, independientemente de que solo querría el resultado si no esta ni vendido ni reservado, vamos que me da igual que se liberara si posteriormente cree un nuevo registro donde si se vendió o reservó.

Nunca hice query dentro de query, igual es la opcion, porque igual me resulta muy util el campo fecha creación.

Si alguien entendió mi problema yo ya desisto, llevo 4 horas intentando dar solución a este problema matemático, y ya soy consciente de yo soy de letras... me doy por vencido.
__________________
Sergio Sánchez
www.sergio.es
  #2 (permalink)  
Antiguo 17/03/2013, 16:41
sjj
 
Fecha de Ingreso: octubre-2008
Mensajes: 213
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Query combinando tablas

Me parece que sólo te falta indicar la tabla del primer id_producto, sino es ambiguo. A mí esta consulta me funcionó:

Código SQL:
Ver original
  1. SELECT tabla_a.id_producto
  2. FROM tabla_a
  3. LEFT JOIN tabla_b ON tabla_a.id_producto = tabla_b.id_producto
  4. WHERE (
  5. (
  6. tabla_b.id_producto IS NULL
  7. )
  8. OR (
  9. tabla_b.estado !=  "vendido"
  10. AND tabla_b.estado !=  "reservado"
  11. )
  12. )
  #3 (permalink)  
Antiguo 17/03/2013, 16:47
 
Fecha de Ingreso: abril-2002
Mensajes: 33
Antigüedad: 22 años
Puntos: 0
Respuesta: Query combinando tablas

Si, es correcto, muchas gracias, pero el verdadero problema es:

solo querría el resultado si no esta ni vendido ni reservado, y con que haya uno liberado ya me da resultado.


Me he equivocado al crear el ejemplo que define el problema, mi verdadera query es ciertamente más compleja, pero entendiendo esto podré con la otra.

Empiezo a pensar que voy a permitir solo un registro por id_producto en la tabla_b, es una guarrada pero no le veo otra solución.

Nuevamente 1000 gracias por el aporte
__________________
Sergio Sánchez
www.sergio.es
  #4 (permalink)  
Antiguo 17/03/2013, 16:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Query combinando tablas

Cita:
Iniciado por Arenas Ver Mensaje
Si, es correcto, muchas gracias, pero el verdadero problema es:

solo querría el resultado si no esta ni vendido ni reservado, y con que haya uno liberado ya me da resultado.


Me he equivocado al crear el ejemplo que define el problema, mi verdadera query es ciertamente más compleja, pero entendiendo esto podré con la otra.

Empiezo a pensar que voy a permitir solo un registro por id_producto en la tabla_b, es una guarrada pero no le veo otra solución.

Nuevamente 1000 gracias por el aporte
Entonces postea tu query completa en el foro de Base de Datos (el DBMS que corresponda), y lo trataremos allí.
Pero necesitamos la query real, no una simulación. Una "parecida" no sirve para resolver problemas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 18/03/2013, 01:01
 
Fecha de Ingreso: abril-2002
Mensajes: 33
Antigüedad: 22 años
Puntos: 0
Respuesta: Query combinando tablas

Pues muchas gracias,

Lo siento, cerre el post sin darme cuenta ya estaba ubicado.

Mi query real:

Cita:
SELECT distinct estado,descripcion_estado from
productos_stocks left join productos_stocks_reserva on productos_stocks.codstock=productos_stocks_reserva .codstock
where ((productos_stocks_reserva.codstock IS NULL) or ((productos_stocks_reserva.activa!="v") and (productos_stocks_reserva.activa!="s"))) and codarticulo='.$codarticulo
Tengo la sensación de que lo más sencillo será guardar un campo char llamado disponible, y generar una clase que lo modifique cada vez que añada un nuevo registro a productos_stocks_reserva, así haría consultas más sencillas, pues es continua la llamada a query´s similares a esta (la tabla es importante en mi sistema)
__________________
Sergio Sánchez
www.sergio.es

Última edición por Arenas; 18/03/2013 a las 01:06 Razón: No sabía que se había ubicado ya en su lugar el post, de hecho lo di como solucionado antes de tiempo.
  #6 (permalink)  
Antiguo 18/03/2013, 01:57
 
Fecha de Ingreso: abril-2002
Mensajes: 33
Antigüedad: 22 años
Puntos: 0
Respuesta: Query combinando tablas

Perfecto, al final la chapuza fue la mejor solución, he agilizado más de 30 querys duplicando la información en un char, actualizados 70.000 registros y reestructurado todo.

Al final no hizo falta ayuda, pero chapó por el foro, creo que me he enganchado!!!
__________________
Sergio Sánchez
www.sergio.es

Etiquetas: php, query, registro, select, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:01.