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

[SOLUCIONADO] como hacer una cosulta de dos tablas que no tienen mucho en comun

Estas en el tema de como hacer una cosulta de dos tablas que no tienen mucho en comun en el foro de Mysql en Foros del Web. Hola chicos pues bueno hoy me ha salido un problema el cual sabia como solucionarlo pero me encontre con que tengo que hacer una consulta ...
  #1 (permalink)  
Antiguo 22/11/2013, 11:30
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 12 años
Puntos: 2
como hacer una cosulta de dos tablas que no tienen mucho en comun

Hola chicos pues bueno hoy me ha salido un problema el cual sabia como solucionarlo pero me encontre con que tengo que hacer una consulta de estas dos tablas. La cosa es que una es la insercion de dos tipos de clientes: EMPRESA y PERSONA entonces no podia crear una tabla de rehistro de clientes para persona y otra para empresa... pues tube la idea de hacer una sola tabla y que un campo type advirtiera de que tipo de cliente es: si es 1 es empresa y si es 2 es persona pero tengo que hacer una consulta donde me muestre en orden de registro a las dos tablas lo que es los nombres y demas pero me sale vacio este es basicamente como se ve el problema

y esta es la consulta que hago pero sale vacia
Código SQL:
Ver original
  1. SELECT em.nombre, ps.nombre, nw.TYPE, nw.info
  2. FROM empresa AS em, personaN AS ps, newClient AS nw
  3. WHERE em.id=nw.info AND ps.id=nw.info ORDER BY nw.id DESC LIMIT 0,100000;
!!!!!!!!! por cierto las tablas tienen diferente nombre pero ahi entiende es lo mismo!!!!!!!!!!!!!!!!!!!!!!!!
si alguien me da ayuda le agradeceria mucho :D

y si hay una mejor forma de solucionar este problema tambien agaradezco
  #2 (permalink)  
Antiguo 22/11/2013, 12:56
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: como hacer una cosulta de dos tablas que no tienen mucho en comun

Disculpa que te lo diga así, pero tu solución es un espanto. No pasaría ni siquiera un examen en programación OO básica.
Lo que deberías haber creado es una Entidad Cliente con dos entidades hijas: ClientePersona y ClienteEmpresa. De ese modo la registración se relaciona con la entidad padre (Cliente), y no con cada una de las otras, que a su vez heredan la PK de la entidad de nivel superior (a su vez es PK y FK en cada una de ellas).
Es un ejemplo sacado de manual básico. Así es como se resuelve siempre este tipo de casos.

A mi entender, deberás replantear el diseño de datos. Lo que tienes, simplemente no sirve, y NO, no puedes relacionar una tabla con una FK que apunte a otras DOS... eso es una total violación al paradigma relacional.
__________________
¿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 22/11/2013, 13:10
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 12 años
Puntos: 2
Respuesta: como hacer una cosulta de dos tablas que no tienen mucho en comun

pues lo bueno es que no es un examen y si se eso alcaso no leiste el principio!!!!!! solo que se me hace muy largo y si te das cuenta si creo las dos tablas newEmpresa y newPersona tienen los mismo datos. Puede que las normas lo digan pero yo salto la norma(pienso que es lo mejor en este caso) y te agradezco POR EL CODIGO SQL QUE PUSISTE me fue de mucha ayuda :D
  #4 (permalink)  
Antiguo 22/11/2013, 13:24
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: como hacer una cosulta de dos tablas que no tienen mucho en comun

Cita:
Puede que las normas lo digan pero yo salto la norma(pienso que es lo mejor en este caso)
Lamento decirte que en BBDD no puedes saltarte ni las normas ni el paradigma. Si lo haces, terminarás con estructuras defectuosas, ineficientes, imposibles de optimizar.
Tenlo en cuenta.
__________________
¿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 22/11/2013, 13:26
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 13 años, 3 meses
Puntos: 397
Respuesta: como hacer una cosulta de dos tablas que no tienen mucho en comun

Cita:
Iniciado por sonickseven Ver Mensaje
y si hay una mejor forma de solucionar este problema tambien agaradezco
Bueno, creo que la respuesta de @gnzsoloyo va más enfocada a esta sugerencia que tu mismo hiciste

Creo que tienes un problema serio entendiendo el funcionamiento de las bases de datos, tema que si o si debes manejar en un nivel mínimo para realizar una página web. En este tema si desde un inicio realizas chapuzas como estas y empiezas a parchear tu base de datos llegará un día que no serás capaz de mantenerla y vendrá el desastre. Es de sabios ver el peligro y proceder a ocultarse

Cita:
y si te das cuenta si creo las dos tablas newEmpresa y newPersona tienen los mismo datos. Puede que las normas lo digan pero yo salto la norma(pienso que es lo mejor en este caso)
Piensas que es lo mejor en ese caso. Basado en qué? En solo no hacer una tabla más? o tu experiencia... En todo caso tu argumento es invalido y te diré por qué:

Una tabla de una base de datos representa una entidad. Por ello existen tablas de empresa y persona y aunque puedan tener campos similares como el nombre, dirección o teléfono nunca serán iguales ya que son representaciones distintas. Así como en la vida diaria una empresa no es igual a una persona.

Por ende una nueva persona es diferente a una nueva empresa. Lo único que comparten es lo de nuevo. Pero su representación y connotación es distinta y por ello cada una debe de tener su propia tabla.

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #6 (permalink)  
Antiguo 22/11/2013, 13:33
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: como hacer una cosulta de dos tablas que no tienen mucho en comun

Coincido completamente con gnzsoloyo, tienes un pésimo diseño de tablas.

El error que tienes en la consulta es tan obvio que estoy seguro que no te has dado cuenta . Al tratar de hacer dos JOIN's sobre el mismo campo, sobre dos tablas distintas, sería el equivalente a buscar un número par que no sea divisible en entre 2... es decir, simplemente NO EXISTE. Es por eso que siempre obtienes una consulta vacía...

Con el modelo que tenes, lo que debes hacer es un doble LEFT JOIN, uno sobre cada tabla, para la tabla EMPRESAS especificando que el tipo tiene que ser 1 y para la tabla PERSONAS especificando que el campo tipo tiene que ser 2. Te pondría el código SQL, pero no sé si también me lo vayas a agradecer como lo hiciste con gnzsoloyo.

Y algunas recomendaciones adicionales:

1. No hagas las uniones entre tablas con el FROM - WHERE... utilizas JOIN's:

Código:
En lugar de hacer esto

FROM tabla1, tabla2 WHERE tabla1.campo = tabla2.campo 

Haz esto:

FROM tabla1 INNER JOIN  tabla2 ON tabla1. campo = tabla2.campo
2. La palabra reservada AS para la definición de ALIAS es completamente inútil y ya no forma parte del estándar de SQL.

Saludos
Leo.
  #7 (permalink)  
Antiguo 22/11/2013, 14:27
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 12 años
Puntos: 2
Respuesta: como hacer una cosulta de dos tablas que no tienen mucho en comun

ya lo solucione con ayuda de mi gran amiga la programación :D
  #8 (permalink)  
Antiguo 22/11/2013, 14:33
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 12 años
Puntos: 2
Respuesta: como hacer una cosulta de dos tablas que no tienen mucho en comun

olle pero una pregunta alguna vez me encontre con un problema asi y no encontre mejor forma de solucionarlo... Y si ok lo se que esta mal pero la verdad le di tantas vueltas al asunto y me toco de esta forma. No se si hizo menos optima mi bd pero con ayuda de programacion lo solucione. Se que esta mal hecho!!!

ademas dices que el problema es crear una sola tabla pero en mi anecdota anterior ya estaba creando como 5 nuevas y despues de eso las consultas era un mierdero de tablas todas iguales en estructura pero diferentes en nombre de la tabla. Te pongo un ejemplo de facebook(no se como ellos lo solucionaron) como ves solo ahi un campo para gustar en la pagina pero ahi ahi GUSTAR para una FOTO, una HISTORIA, una RESPUESTA, un LINK, etc y ellos solo tienen un campo que muestra en orden descendente los me GUSTA. No tengo ni la menor idea de como ellos lo abran solucionado pero si te digo es un gran problema crear una tabla me gusta para HISTORIA, una tabla me gusta para RESPUESTA, y sicesivamente. La verdad me vaso mi convivvion de hacerlo de esta forma en: Hace tiempo veian algunas cosas como imprudentes y hoy en dia son lo nuevo. Los locos que se salen de las normas aveces dan con cosas nuevas. Y aprovecho que tambien se programar. No se la decisión esta bien o mal, el futuro lo dira

Código sa:
Ver original
  1. Una tabla de una base de datos representa una entidad. Por ello existen tablas de empresa y persona y aunque puedan tener campos similares como el nombre, dirección o teléfono nunca serán iguales ya que son representaciones distintas. Así como en la vida diaria una empresa no es igual a una persona.

pero yo puse para diferenciar el campo type que especifica si es una empresa o una persona

Última edición por sonickseven; 22/11/2013 a las 14:40

Etiquetas: campo, comun, cosulta, 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 03:18.