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

Selecionar datos de dos tablas con 1 consulta?

Estas en el tema de Selecionar datos de dos tablas con 1 consulta? en el foro de Bases de Datos General en Foros del Web. Uso mysql. Tengo dos tablas: usuarios y usuarios_masdatos: Usuarios ---------------------- identificador nick password fecha_registro email usuarios_masdatos ------------------------ id_usuario aficciones biografía pais web ... En usuarios ...
  #1 (permalink)  
Antiguo 08/02/2005, 12:55
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
Selecionar datos de dos tablas con 1 consulta?

Uso mysql.

Tengo dos tablas: usuarios y usuarios_masdatos:

Usuarios
----------------------
identificador
nick
password
fecha_registro
email

usuarios_masdatos
------------------------
id_usuario
aficciones
biografía
pais
web
...

En usuarios van a estar cubiertos todos los campos, los campos de usuarios_masdatos puede que no estén cubiertos...

Si junto todo en la misma tabla con tantos campos opcionales (solo puse 4 pero hay muchos más) me quedan muchos vacíos, por eso dividí la tabla usuarios en dos.

Pero ahora tengo un problema: quiero mostrar todos los datos de los usuarios en un listado, para ello hago esto:

select usuarios.identificador,usuarios.nick,usuarios.pass word,usuarios.fecha_registro,usuarios.email
usuarios_masdatos.aficciones,usuarios_masdatos.bio grafia [...] from usuarios,usuarios_masdatos where usuarios.identificador = usuarios_masdatos.id_usuario


Pero esa consulta solo me muestra aquellos usuarios que tienen un registro correspondiente en usuarios_masdatos, de manera que no me muestra todos los usuarios.

Para mostrarlos todos envío dos consultas, primero selecciono todos los campos de usuarios y luego selecciono todos los campos de usuarios_masdatos para el usuario anterior (si no existe en esta tabla pues no muestro nada)

El problema que se presenta es la optimización, ya que en este ejemplo solo son dos consultas pero aveces necesito seleccionar datos de hasta cuatro tablas... es ahí cuando es necesario resumir esto en el mínimo número posible de consultas...

Puedo hacer los que pretendo con una consulta? No sé, una anidada o algo así...

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)

Última edición por DjNelson; 08/02/2005 a las 12:59
  #2 (permalink)  
Antiguo 08/02/2005, 13:32
 
Fecha de Ingreso: febrero-2002
Mensajes: 157
Antigüedad: 22 años, 2 meses
Puntos: 0
Mira, nose si en MySql sea diferente a una base de datos SQL, pero cuando yo hago consultas a 2 bases de datos diferentes(obviamente en el mismo servidor, y en el mismo grupo) hago lo siguiente:

select t1.campo1,t1.campo2,t2.campo3 from basededatos.dbo.tabla1 t1, basededatos2.dbo.tabla1 t2 where ........

si te fijas, ocupo el "dbo", ya que este tiene las propiedades para poder consultarse de una base de datos a otra, pero de principio debes darle permiso desde una de las base de datos a la otra para que se puedan comunicar, esto lo hago yo en usuarios de la base de datos que quiero que se pueda comunicar.

Espero que no este muy enredado y que de algo te sirva.

salu2. Puyehue
  #3 (permalink)  
Antiguo 08/02/2005, 13:37
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
Las tablas están en la misma base de datos, me refiero a cómo seleccionar todos los campos de la primera tabla + todos los campos relacionados de la segunda...

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)

Última edición por DjNelson; 09/02/2005 a las 13:53
  #4 (permalink)  
Antiguo 11/02/2005, 13:23
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
Me dá la impresión de que no soy el único al que se le habrá planteado este problema...
Alguien tiene una sugerencia?
Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #5 (permalink)  
Antiguo 11/02/2005, 18:48
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 5 meses
Puntos: 2
SUGERENCIA: ¿Has probado quitando "where usuarios.identificador = usuarios_masdatos.id_usuario"?
  #6 (permalink)  
Antiguo 12/02/2005, 03:28
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
La condición where es necesaria para relacionar los datos de usuarios con su correspondiente en usuarios_masdatos...

Alguna otra sugerencia?

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #7 (permalink)  
Antiguo 12/02/2005, 04:24
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 5 meses
Puntos: 2
Lo decía porque eso es lo que hace que sólo aparezcan los registros en que hay datos en las dos tablas. Lo que relaciona los datos de usuarios con su correspondiente en usuarios_masdatos es la relación de las tablas a través de un campo clave. (relaciones), no la condición de la consulta.
  #8 (permalink)  
Antiguo 12/02/2005, 04:51
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
Por eso pregunto por si alguien sabe como hacerlo con consultas anidadas o con condiciones dentro de la consulta o algo así, ya que no tengo mucha idea de sql.

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #9 (permalink)  
Antiguo 14/02/2005, 07:29
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 8 meses
Puntos: 2
Lo que pretendes es un left join:
Código:
select usuarios.identificador,usuarios.nick,usuarios.pass word,usuarios.fecha_registro,usuarios.email
usuarios_masdatos.aficciones,usuarios_masdatos.bio grafia [...] from usuarios left join usuarios_masdatos on usuarios.identificador = usuarios_masdatos.id_usuario
de esta forma se muestran todos los registros de la tabla usuarios tengan o no registro de cruce en usuarios_masdotos.
Creo que esto es lo que pides.
Un saludo.
__________________
Estoy contagiado de Generación-I
  #10 (permalink)  
Antiguo 14/02/2005, 11:19
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
Muchas gracias Vice, eso es lo que andaba buscando! Si tenía que haber alguna forma de hacerlo...

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
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 10:32.