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

Filtrado de tres tablas

Estas en el tema de Filtrado de tres tablas en el foro de Mysql en Foros del Web. Hola a todos estoy totalmente perdido con el filtrado de estas tablas.¿ me podeis hechar una mano.? Tengo tres tablas de la siguiente manera: TIENDA, ...
  #1 (permalink)  
Antiguo 04/09/2010, 03:19
 
Fecha de Ingreso: noviembre-2003
Ubicación: alicante
Mensajes: 44
Antigüedad: 21 años
Puntos: 2
Filtrado de tres tablas

Hola a todos
estoy totalmente perdido con el filtrado de estas tablas.¿ me podeis hechar una mano.?
Tengo tres tablas de la siguiente manera:

TIENDA, es el nombre de la tabla con los siguientes campos:
cod_tienda
cod_producto
stock

PRODUCTO, es el nombre de la tabla con los siguientes campos:
cod_producto
descripcion

ALMACEN, es el nombre de la tabla con los siguientes campos:
cod_almacen
cod_producto
stock

Deseo obtener una relacion de los productos de los que no dispone una tienda, por ejemplo la T6 y que existen en algun almacen, sacando el producto y la descripcion.
(No dispone es que no eexisten, no que su stock sea cero)

Gracias a todos de antemano

Salu2
  #2 (permalink)  
Antiguo 04/09/2010, 05:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Filtrado de tres tablas

Código MySQL:
Ver original
  1. SELECT cod_producto, descripcion, cod_tienda
  2. FROM producto
  3.    INNER JOIN tienda USING(cod_producto)
  4.    LEFT JOIN almacen USING (cod_producto)
  5. WHERE cod_almacen IS NULL;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 04/09/2010, 09:08
 
Fecha de Ingreso: noviembre-2003
Ubicación: alicante
Mensajes: 44
Antigüedad: 21 años
Puntos: 2
Respuesta: Filtrado de tres tablas

Hola gnzsoloyo
Gracias por responder, pero no consigo que el select funcione.
Necesito detectar los productos que estando dentro de cualquier almacen no existan el la tienda y listarlos con su codigo y descripcion.

Quisiera poder hacerlo en una sola sentencia select.
Logicamente quedaría así:

Seleccionar cod_producto, descripcion de la tabla PRODUCTO
con el cod_producto leido->

Mirar en la tabla TIENDA, comprobar que estamos leyendo la tienda T6 y entonces
si el cod_producto existe -> no hacer nada
si el cod_producto no existe ->

Mirar en la tabla ALMACEN, si el cod_producto existe -> listar el producto


La historia es montar el select, he probado de mil maneras y no funciona.

Gracias por todo de antemano.

Salu2
  #4 (permalink)  
Antiguo 04/09/2010, 14:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Filtrado de tres tablas

A mi a simple vista me huele que la relación está mal definida...
Si una tienda existe, la tienda posee estos atributos al menos:
Cita:
Tienda(cod_tienda, nomrbe, direccion)
Si existen productos, la tabla productos tiene estos atributos al menos:
Cita:
Producto(cod_producto,descripcion, precio)
si una tienda tiene productos, sus atributos son:
Cita:
Tienda_Producto(cod_producto, cod_tienda, stock)
.
Si hay un almacen centralizado para abastecer a las tiendas, entonces podría ir:
Almacen(cod_almacen, cod_producto, stock)
pero esta última tabla no sirve por sí misma para saber la relación entre tienda y producto.
Con esta estructura,
Código MySQL:
Ver original
  1. SELECT cod_producto, descripcion, cod_tienda
  2. FROM producto JOIN tienda
  3. WHERE (cod_almacen, cod_producto) NOT IN (SELECT cod_almacen, cod_producto FROM almacen);
devolvería qué productos no aparecen en qué tienda.

Con la tuya, puedes averiguar cuáles productos no están en tiendas, pero en principio, si hay más de una tienda y más de un producto, no puedes saber cuáles tiendas y cuales productos son, porque serán respuestas por NULL. Y el NULL repetido genera indeterminación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 04/09/2010 a las 14:18
  #5 (permalink)  
Antiguo 05/09/2010, 03:02
 
Fecha de Ingreso: noviembre-2003
Ubicación: alicante
Mensajes: 44
Antigüedad: 21 años
Puntos: 2
Respuesta: Filtrado de tres tablas

Saludos y gracias GNZSOLOYO, eres un crack!!!.

Bueno la solución basandome en el select que pusiste es la que sigue:

SELECT producto.cod_producto, producto.descripcion
FROM producto JOIN almacen
WHERE (producto.cod_producto) NOT IN (SELECT tienda.cod_producto FROM tienda WHERE cod_tienda = 'T6' )
GROUP BY almacen.cod_producto


de esta manera, aunque haya mas de un almacen, agrupa los articulos, ya que la clave es cod_almacen, cod_producto, con el WHERE cod_tienda='T6', fuerzo a ver solo esa tienda, y evito la ambiguedad.

Lo del NOT IN ha sido lo que no me esperaba, ya que yo intentaba discriminar por un distinto en las claves de producto y así no habia manera.

Lo dicho, muchas gracias

salu2

Etiquetas: tablas, tres, filtros
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 09:39.