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

División de tablas en mysql

Estas en el tema de División de tablas en mysql en el foro de Mysql en Foros del Web. Saludos a todos... tengo un pequeño problema: debo de hacer una división de tablas en mysql y estoy atorado en esto. dada una tabla B ...
  #1 (permalink)  
Antiguo 25/11/2011, 14:50
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 14 años, 7 meses
Puntos: 44
División de tablas en mysql

Saludos a todos... tengo un pequeño problema: debo de hacer una división de tablas en mysql y estoy atorado en esto.

dada una tabla B debo dividirla entre una tabla A y generar una tabla C cuyos campos que contiene son aquellos de la tabla B que no existen en la tabla A. En ese caso el campo Código Comercial es el único de la tabla B que no existen en la tabla A y Un registro se encuentra en la tabla resultado si y sólo si está asociado en tabla B con cada fila de la tabla A


Código text:
Ver original
  1. Tabla A
  2. ----------------------
  3. |Código Producto|
  4. ----------------------
  5. |       1035           |
  6. |       2241           |
  7. |       2249           |
  8. |       5818           |
  9. -----------------------

En una segunda tabla extraemos, de la tabla de ventas, el código del producto y el comercial que lo ha vendido, lo hacemos con una proyección y evitamos traer valores duplicados. El resultado podría ser el siguiente:

Tabla B
------------------------------------------------
|Código Comercial | Código Producto|
-------------------------------------------------
| 10 | 2241 |
| 23 | 2518 |
| 23 | 1035 |
| 39 | 2518 |
| 37 | 2518 |
| 10 | 2249 |
| 23 | 2249 |
| 23 | 2241 |
------------------------------------------------
Si dividimos la tabla B entre la tabla A obtendremos como resultado una tercera tabla que:


Tabla Resultado
Código Comercial
23

¿Por qué el resultado es 23?. El comercial 23 es el único de la tabla B que tiene asociados todos los posibles códigos de producto de la tabla A.

ok... ahora mi problema es que cuando ejecuto segun yo mi instruccion mysql me arroja esto

----------------
codigoComercial
------------------
23


:s alguien sabe cual es la instruccion mysql para división de tablas??????
  #2 (permalink)  
Antiguo 25/11/2011, 14:57
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: División de tablas en mysql

No resulta completamente claro a qué "división de tablas" te estás refiriendo.
Las operaciones entre tablas son operaciones a nivel de registros con los valores de las columnas como parámetros. Pero no existe una sentencia que le indique a MySQL que coloque las columnas comunes o no comunes entre dos tablas. Eso se determina manualmente, al invocar las columnas que deseas.
Pero no es una sentencia específica.
¿Podrías explicar un poco mejor tu problema, y de dónde surge?
Si es posible, postea las consultas en SQL que estás haciendo, porque los resultados no nos dan una idea de qué pretendes hacer.
__________________
¿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 26/11/2011, 16:28
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 14 años, 7 meses
Puntos: 44
Respuesta: División de tablas en mysql

muchas gracias por tu interés... y te pongo acá mi sql de mysql para tratar de solucionar esto...

SELECT * DISTINC FROM tablab LEFT JOIN tablaa ON tablaa.codigoProducto=tablab.codigoProducto WHERE tablab.codigoProducto IS NOT NULL;

y esta es la pagina donde lo encontré

http://www.programatium.com/manuales/sql/modrel004.htm
  #4 (permalink)  
Antiguo 26/11/2011, 17:18
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: División de tablas en mysql

Hay un detalle que tienes que considerar: esta consulta te puede dar resultados erróneos porque en el SQL el orden de los factores si altera el producto. Poner la tabla tablaA, después de tablaB puede dar un mal resultado si la tablaA tiene más registros que tablaB, es decir, si la tablaB depende de la tablaA y no al revés.
Además, en un LEFT JOIN buscar un IS NOT NULL sobre la primera tabla es irrelevante, porque jamás existirán registros NULL en esa respuesta. Sólo tiene sentido usando RIGHT JOIN y no LEFT JOIN, que es su complementario.
La razón de esto es un poco complicada si no conoces algo más que los básico de bases de datos. La idea es que en un LEFT JOIN devuelve todos los registros existentes de la primera tabla, tengan o no correspondencia con la segunda. Como sólo trabaja con registros reales, no existen NULL en la primera tabla, es simplemente imposible. Por eso la condición que pones no es discriminante.
Entonces deberías poner las tablas al revés, como digo, para que la consulta de resultados razonables:
Código MySQL:
Ver original
  1. FROM tablab LEFT JOIN tablaa ON tablaa.codigoProducto=tablab.codigoProducto
  2. WHERE tablab.codigoProducto IS NOT NULL;
Pero esto es sintácticamente igual a poner INNER JOIN, ya que si eliminas los no coincidentes te quedan los coincidentes, y eso es precisamente lo que busca el INNER JOIN, con la ventaja de no tener que indicar nada más:
Código MySQL:
Ver original
  1. FROM tablaa TA INNER JOIN tablab TB ON TA.codigoProducto=TB.codigoProducto;
¿Se entiende la idea?
__________________
¿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 26/11/2011, 18:11
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 14 años, 7 meses
Puntos: 44
Respuesta: División de tablas en mysql

muchas gracias por tu interés... y te pongo acá mi sql de mysql para tratar de solucionar esto...

SELECT * DISTINC FROM tablab LEFT JOIN tablaa ON tablaa.codigoProducto=tablab.codigoProducto WHERE tablab.codigoProducto IS NOT NULL;

y esta es la pagina donde lo encontré

http://www.programatium.com/manuales/sql/modrel004.htm
  #6 (permalink)  
Antiguo 26/11/2011, 18:15
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: División de tablas en mysql

Cita:
Iniciado por p414 Ver Mensaje
muchas gracias por tu interés... y te pongo acá mi sql de mysql para tratar de solucionar esto...

SELECT * DISTINC FROM tablab LEFT JOIN tablaa ON tablaa.codigoProducto=tablab.codigoProducto WHERE tablab.codigoProducto IS NOT NULL;

y esta es la pagina donde lo encontré

http://www.programatium.com/manuales/sql/modrel004.htm
¿Te das cuenta que estás repitiendo la respuesta, y que yo ya te contesté esto?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 27/03/2012, 13:08
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 14 años, 7 meses
Puntos: 44
Respuesta: División de tablas en mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿Te das cuenta que estás repitiendo la respuesta, y que yo ya te contesté esto?
wow... maldito dejavu jajajajaja xD
  #8 (permalink)  
Antiguo 27/03/2012, 13:43
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: División de tablas en mysql



No problem, es sólo síntoma de exceso de PC.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campos, sql, 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 02:26.