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

Como unir dos tablas

Estas en el tema de Como unir dos tablas en el foro de Bases de Datos General en Foros del Web. Hola, estoy intentando unir dos tablas pero no de la forma tradicional. Planteo la situacion para ver si me podeis ayudar. Imaginad que tengo dos ...
  #1 (permalink)  
Antiguo 30/11/2011, 17:33
 
Fecha de Ingreso: abril-2004
Ubicación: Valencia
Mensajes: 436
Antigüedad: 20 años
Puntos: 8
Como unir dos tablas

Hola,

estoy intentando unir dos tablas pero no de la forma tradicional. Planteo la situacion para ver si me podeis ayudar.
Imaginad que tengo dos tablas Tabla1 y Tabla2, ambas tienen dos campos que en ambas tablas se llaman igual y son del mismo tipo, id_articulo y nombre_articulo

Lo que me gustaría es juntar ambas pero seguir con dos columnas, no con cuatro columnas como lo haria un JOIN.
Para que nos entendamos, imaginad que cada tabla hace referencia a un almacen. A mi lo que me gustaría es buscar un producto independientemente del almacen, y hacerlo en una sola consulta, no en dos.

Por aclararlo de una forma grafica, si nos imaginamos las tablas fisicamente una al lado de la otra, lo que me gustaria hacer es coger la segunda y arrastrarla hasta ponerla debajo de la primera, de modo que se conviertan en una sola tabla mas larga, y asi poder buscar lo que quiero en el interior de esta super tabla.

He simplificado mucho el ejemplo para que se entienda, por eso puede parecer absurdo.

En fin, agradezco si alguien me puede echar un cable.

Gracias de antemano.

Saludos.
  #2 (permalink)  
Antiguo 01/12/2011, 11:57
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Como unir dos tablas

Hola cnyx:

Lo que quieres hacer es lo que hace la UNION, no mencionas qué BD estás utilizando, pero esta operación es soportada por casi todos los manejadores, así es que no deberías tener problemas para implementarlo. Checa este script en MySQL:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE tabla1 (id INT, descripcion VARCHAR(10));
  2. Query OK, 0 rows affected (0.13 sec)
  3.  
  4. mysql> INSERT INTO tabla1 VALUES (1, 'uno'), (2, 'dos'), (3, 'tres');
  5. Query OK, 3 rows affected (0.02 sec)
  6. Records: 3  Duplicates: 0  Warnings: 0
  7.  
  8. mysql> SELECT * FROM tabla1;
  9. +------+-------------+
  10. | id   | descripcion |
  11. +------+-------------+
  12. |    1 | uno         |
  13. |    2 | dos         |
  14. |    3 | tres        |
  15. +------+-------------+
  16. 3 rows in set (0.00 sec)
  17.  
  18. mysql> CREATE TABLE tabla2 (id INT, descripcion VARCHAR(10));
  19. Query OK, 0 rows affected (0.11 sec)
  20.  
  21. mysql> INSERT INTO tabla2 VALUES (2, 'dos'), (3, 'otro tres'), (4, 'cuatro') ;
  22. Query OK, 3 rows affected (0.01 sec)
  23. Records: 3  Duplicates: 0  Warnings: 0
  24.  
  25. mysql> SELECT * FROM tabla2;
  26. +------+-------------+
  27. | id   | descripcion |
  28. +------+-------------+
  29. |    2 | dos         |
  30. |    3 | otro tres   |
  31. |    4 | cuatro      |
  32. +------+-------------+
  33. 3 rows in set (0.00 sec)
  34.  
  35. mysql> SELECT * FROM tabla1 UNION SELECT * FROM tabla2;
  36. +------+-------------+
  37. | id   | descripcion |
  38. +------+-------------+
  39. |    1 | uno         |
  40. |    2 | dos         |
  41. |    3 | tres        |
  42. |    3 | otro tres   |
  43. |    4 | cuatro      |
  44. +------+-------------+
  45. 5 rows in set (0.00 sec)
  46.  
  47. mysql> SELECT * FROM tabla1 UNION ALL SELECT * FROM tabla2;
  48. +------+-------------+
  49. | id   | descripcion |
  50. +------+-------------+
  51. |    1 | uno         |
  52. |    2 | dos         |
  53. |    3 | tres        |
  54. |    2 | dos         |
  55. |    3 | otro tres   |
  56. |    4 | cuatro      |
  57. +------+-------------+
  58. 6 rows in set (0.00 sec)

Observa que el registro 2 existe tanto en la tabla1 como en al tabla2 CON LA MISMA DESCRIPCIÓN, al hacer una UNION simple (primer consulta), los registros duplicados se eliminan (sólo aparece una vez), observa también que el registro 3 también aparece en las dos tablas, pero TIENE UNA DESCRIPCIÓN DIFERENTE, por lo tanto es tratado como un registro diferente.

Si quieres que aparezcan los registros duplicados simplemente haz un UNION ALL en lugar de uno sencillo (segunda consulta).

Saludos
Leo.
  #3 (permalink)  
Antiguo 01/12/2011, 12:58
 
Fecha de Ingreso: abril-2004
Ubicación: Valencia
Mensajes: 436
Antigüedad: 20 años
Puntos: 8
Respuesta: Como unir dos tablas

Hola Leo, gracias por tu respuesta, muy completa.
Si adicionalmente quisiera hacer una consulta en esa super tabla recien creada, podria hacer un select donde el from fuera todo lo anterior entre parentesis?

Gracias de nuevo.
  #4 (permalink)  
Antiguo 01/12/2011, 14:44
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Como unir dos tablas

Hola de nuevo:

Efectivamente, puedes hacer un utilizar la unión como una subconsulta. Sigues sin decirnos qué BD estás utilizando, pero por lo general lo único que tienes que hacer es asignarle un alias a la consulta:

Código MySQL:
Ver original
  1. mysql> SELECT T.descripcion FROM
  2.     -> (SELECT * FROM tabla1 UNION ALL SELECT * FROM tabla2) T;
  3. +-------------+
  4. | descripcion |
  5. +-------------+
  6. | uno         |
  7. | dos         |
  8. | tres        |
  9. | dos         |
  10. | otro tres   |
  11. | cuatro      |
  12. +-------------+
  13. 6 rows in set (0.45 sec)

Saludos
Leo
  #5 (permalink)  
Antiguo 01/12/2011, 15:00
 
Fecha de Ingreso: abril-2004
Ubicación: Valencia
Mensajes: 436
Antigüedad: 20 años
Puntos: 8
Respuesta: Como unir dos tablas

Hola Leo, gracias de nuevo.
Uso mysql. Resulta que he ida a hacerlo y me da error porque en una de las tablas tengo una columna mas y no habia reparado en ello. Bueno no pasa nada, he ido a añadir la columna a traves de phpmyadmin como he hecho cientos de veces, pero esta vez simplemente no lo hace, es decir le doy un nombre al campo, tipo de dato text, cotejamiento y demas, le doy a guardar, se queda unos 10 segundos pensando y luego se sale de la base de datos. Cuando voy a mirar la tabla, el campo no esta. Se que no era el proposito inicial de este post, pero ¿alguna idea? lo unico que puedo decir es que la tabla tiene unos 55.000 registros, pero no creo que falle por eso.
  #6 (permalink)  
Antiguo 01/12/2011, 15:51
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Como unir dos tablas

Hola de nuevo cnyx:

El comportamiento que comentas es bastante raro... no se me ocurre qué puede estar pasando... sería conveniente que intentaras hacer la modificación de la tabla desde la consola de MySQL y no desde PHPMyAdmin... o en su defecto que utilizaras WORKBENCH, que desde mi punto de vista es al mejor consola de administración para MySQL... si ocurre algún error es conveniente que pongas el código del error, para ver qué puede estar pasando.

Saludos
Leo.
  #7 (permalink)  
Antiguo 04/12/2011, 11:05
 
Fecha de Ingreso: abril-2004
Ubicación: Valencia
Mensajes: 436
Antigüedad: 20 años
Puntos: 8
Respuesta: Como unir dos tablas

Hola leonardo_josue,
gracias de nuevo. El error que te comenté desaparecio misteriosamente y ya he conseguido hacer la union que me comentaste tal y como la explicas. Ahora lo que estoy intentando es hacer la consulta mas rapida, ya que son dos tablas muy grandes y se demora unos segundos.

Saludos.

Etiquetas: tabla, tablas, campos
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:57.