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

unir dos tablas sin relacion

Estas en el tema de unir dos tablas sin relacion en el foro de Mysql en Foros del Web. Buenas, Estoy intentando de unir dos tablas que pueden contener el mismo id pero que no tiene ninguna relacion. Como lo puedo hacer?? Query: @import ...
  #1 (permalink)  
Antiguo 15/07/2012, 05:28
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
unir dos tablas sin relacion

Buenas,

Estoy intentando de unir dos tablas que pueden contener el mismo id pero que no tiene ninguna relacion.
Como lo puedo hacer??

Query:

Código MySQL:
Ver original
  1.     *
  2. FROM messages m
  3. INNER JOIN chat c
  4. ON i.id_to = m.id_to
  5.      m.id_to = 21

en este caso el id 21 si que esta en la tabla chat pero no en message. Entonces, quiero que me aparezca el contenido de chat o de la que contenga información con ese id.

La idea es hacer una clase y obtener los datos de esas tablas para despues mostrar toda la info junta.


Saludos
  #2 (permalink)  
Antiguo 15/07/2012, 09: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, 5 meses
Puntos: 2658
Respuesta: unir dos tablas sin relacion

Ya antes alguien preguntó eso: "¿Cómo puedo unir dos tablas sin relacion?".
Vamos a ver si se entiende en una sola respuesta:

Si las dos tablas no están relacionadas por algún campo o columna que actúe como FOREIGN KEY es absolutamente imposible unirlas, al menos de una forma CONSISTENTE...

Simple, ¿no?

NO SE PUEDE. Cualquier intento de hacerlo por campos no relacionados, genera un producto carteisano, mezclando datos que no se corresponden y dando lugar a lo que se conoce como "información basura".

Si las tablas guardan alguna relación aparente, debes definirla mejor (corrigiendo el modelo de datos si es necesario), de modo que se pueda realizar la consulta en forma correcta. De lo contrario, no hay nada que hacer.

Ahora bien, si el problema es que la relación existe, pero es opcional u ocasional, el tema no es que no estén relacionadas, sino que la relación requiere de ciertas condiciones. En esos casos lo que se hacen son JOINS usando LEFT JOIN o RIGHT JOIN, según se necesite.
Pero para eso la relación debe ser real, definida en el modelo, y no inventada al vuelo.

¿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)

Última edición por gnzsoloyo; 15/07/2012 a las 13:33
  #3 (permalink)  
Antiguo 15/07/2012, 12:26
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: unir dos tablas sin relacion

Buenas,

gnzsoloyo:
Si las dos tablas no están relacionadas por algún campo o columna que actúe como FOREIGN KEY es absolutamente imposible unirlas, al menos de una forma CONSISTENTE...

Tu puedes unir dos tablas que compartan el mismo id pero que no tengan FOREIGN KEY.

como es este caso,

Código MySQL:
Ver original
  1.     *
  2. FROM messages m
  3. INNER JOIN chat c
  4. ON i.id_to = m.id_to
  5.      m.id_to = 21

la unica relacion que tiene esta tablas es cuando coincide el id (i.id_to = m.id_to). Ahora el problema que tengo es que si ese id no coincide no me muestra la informacion.
en este ejemplo busco con el id 21 que la tabla chat tiene el registro con ese id pero el de messages no. entonces, quiero saber si hay alguna forma para que me lo muestre.

otra preguntra que tengo es:
Hace poco monte una bd y empece a poner las FOREIGN KEY pero cuando empece a insertar datos en la tablas me daba error porque como las tablas tenian FOREIGN KEY me obligaba a insertar datos en todas las tablas que esten relacionadas.
Ejemplo
tabla empresa (id_empresa, nombre) tabla empleados (id_empleados, nombre) y tercera tabla empresa_empleados(id_empresa_empleados, id_empresa, id_empleados).
al hacer la FOREIGN KEY y empezar a insertar datos me daba un error de mysql ya que me obligaba insertar los datos en todas las tablas y no solo en empresa.
Siempre que hacer una relacion y empiezas a insertar datos tiene que insertar datos a todas las tablas relacionados????
  #4 (permalink)  
Antiguo 15/07/2012, 16:25
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, 5 meses
Puntos: 2658
Respuesta: unir dos tablas sin relacion

Cita:
la unica relacion que tiene esta tablas es cuando coincide el id (i.id_to = m.id_to). Ahora el problema que tengo es que si ese id no coincide no me muestra la informacion.
Eso es un comportamiento esperado.
SI en un registro de mensaje corresponde a un chat determinado, debe obligatoriamente contener la FK de la otra tabla. Si no existe ningún mensaje referido a un determinado chat, es que ese chat no tuvo jamás mensajes.
Y si todo chat tiene mensajes... entonces tienes un problema de diseño de procesos, porque no estás almacenando información consistente.

UN detalle: Para determinar si un chat no tuvo mensajes, se usa LEFT JOIN, como ya te dije, pero devolverá NULL en esos casos en la segunda tabla.
Ten en cuenta que no es lo mismo hablar de no existencia de relaciones constantes, que de entidades débiles (tablas funcionalmente dependientes). Las primeras indican que no hay relación, la segunda que hay dependencia funcional.

Cita:
Hace poco monte una bd y empece a poner las FOREIGN KEY pero cuando empece a insertar datos en la tablas me daba error porque como las tablas tenian FOREIGN KEY me obligaba a insertar datos en todas las tablas que esten relacionadas.
Eso es lo que se supone que debes hacer.
Puede que no tengas bien claro o la razón de la existencia de las FK o su impacto en las aplicaciones.
Una FK se usa para generar una restricción al sistema que permita asegurar que la información es consistente, que no existe redundancia innecesaria, y que las dependencias entre tablas se respeta.
Ahora bien, desde el punto de vista de los procedimientos, la definición de FK en una tabla obliga a los desarrolladores a respetar la cadena de dependencias, lo que a veces los programadores no quieren hacer. Pero eso no significa que uno deba acceder a suspender las dependencias en aras de "facilitarle" el trabajo (y consecuentemente meter la pata) a los programadores. Ellos tienen la obligación de respetar la consistencia de los datos, que es crucial para los sistemas.

Entonces, la existencia de la FK se usa para asegurar, por ejemplo:

- Que no se pueda facturar un producto que no existe en el stock.
- Que no se imputen cargas sociales a empleados inexistentes.
- Que no se puedan cobrar impuestos que no corresponden por categoría impositiva.
- Que no ingreses el detalle de la factura, para una factura que no ingresó jamás.
- Un enorme, enorme, enorme, ENORME etcétera.

Cita:
Siempre que hacer una relacion y empiezas a insertar datos tiene que insertar datos a todas las tablas relacionados????
Siempre.
Es parte fundamental del paradigma relacional implementado a nivel físico, que los valores a ingresar en un registro, en una columna que sea definida como FK, deben existir previamente en la tabla referida.
Siempre.
Inevitablemente.
Obligatoriamente.

¿Queda claro el por qué?
__________________
¿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: join, relacion, 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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 18:42.