elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Duda consulta SQL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda consulta SQL  (Leído 5,367 veces)
soyloqbuskas

Desconectado Desconectado

Mensajes: 218


¡El conocimiento es de todos!


Ver Perfil
Duda consulta SQL
« en: 1 Junio 2016, 13:11 pm »

¡ Buenas a todos !

Tengo un problema con una consulta SQL.
Tampoco sabia muy bien en que parte del foro debia iniciar este tema...por eso lo pongo en dudas generales.

El problema es el siguiente: Tengo 2 tablas con una relacion reflexiva (usuario<->usuarioAmigos). La tabla usuario(idUsuario, nombre) y la tabla usuarioAmigos (idUsuario, idAmigo). Tengo que hacer una consulta que me muestre las siguientes columnas (idUsuario, nombreUsuario, idAmigo, nombreAmigo).

El problema lo tengo con los datos de la columna nombreAmigo...idUsario, nombreUsuario y idAmigo los saco correctamente, pero en la columna nombreAmigo me saca los datos de la columna nombreUsuario....

Llevo 2 dias con este ejercicio y no soy capaz de sacarlo...Esto es lo que tengo hecho:
Código
  1. SELECT usuario.idusuario, usuario.nombreapellidos, usuarioamigos.idamigo, usuario.nombreapellidos FROM usuario
  2. INNER JOIN usuarioamigos ON usuario.idusuario=usuarioamigos.idusuario
  3. WHERE usuario.nombreapellidos IN(
  4. SELECT usuario.nombreapellidos FROM usuario
  5. INNER JOIN usuarioamigos ON usuario.idusuario=usuarioamigos.idamigo
  6. )
  7. ORDER BY usuario.idusuario
  8.  

La salida de la consula es esta:
Citar

idusuario    nombreUsuario   idamigo   nombreAmigo   

1             nombreapellidos1  2              nombreapellidos1
1             nombreapellidos1  3              nombreapellidos1
1             nombreapellidos1  5              nombreapellidos1
1             nombreapellidos1  6              nombreapellidos1
2             nombreapellidos2  1              nombreapellidos2
2             nombreapellidos2  3              nombreapellidos2
2             nombreapellidos2  4              nombreapellidos2


¿Alguien sabe como hacer un alias o algo parecido en la columna nombre del amigo para que la distinga de la columna nombre del usuario?

Muchas gracias, un saludo.


« Última modificación: 1 Junio 2016, 16:39 pm por soyloqbuskas » En línea

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw
DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: Duda consulta SQL
« Respuesta #1 en: 1 Junio 2016, 15:07 pm »

Te saca bien los valores pero el nombre de la columna es lo que te saca mal?

Porque no utilizas AS

Algo como:

Código
  1. SELECT nombreAmigo AS LoQueQuieras, .... FROM ....

Salu2s


En línea

soyloqbuskas

Desconectado Desconectado

Mensajes: 218


¡El conocimiento es de todos!


Ver Perfil
Re: Duda consulta SQL
« Respuesta #2 en: 1 Junio 2016, 16:38 pm »

Buenas DarK_FirefoX

He reeditado la la 1º publicación para que quede mas claro. Mi problema no esta en el nombre de la columna. Mi problema esta en los datos de las columnas, porque tengo esta salida:

Citar
idusuario    nombreUsuario        idamigo   nombreAmigo  

1               nombreapellidos1    2            nombreapellidos1
1               nombreapellidos1    3            nombreapellidos1
1               nombreapellidos1    5            nombreapellidos1
1               nombreapellidos1    6            nombreapellidos1
2               nombreapellidos2    1            nombreapellidos2
2               nombreapellidos2    3            nombreapellidos2
2               nombreapellidos2    4            nombreapellidos2
                      .....                                   .....


Y quiero que me salga esta salida:

Citar
idusuario    nombreUsuario        idamigo   nombreAmigo  

1               nombreapellidos1    2            nombreapellidos2
1               nombreapellidos1    3            nombreapellidos3
1               nombreapellidos1    5            nombreapellidos5
1               nombreapellidos1    6            nombreapellidos6
2               nombreapellidos2    1            nombreapellidos1
2               nombreapellidos2    3            nombreapellidos3
2               nombreapellidos2    4            nombreapellidos4
                      .....                                   .....


Si te fijas en los datos de la columna nombreAmigo no salen bien porque los nombres de la columna nombreAmigo no se corresponde con el idAmigo...
« Última modificación: 1 Junio 2016, 16:40 pm por soyloqbuskas » En línea

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw
DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: Duda consulta SQL
« Respuesta #3 en: 1 Junio 2016, 18:37 pm »

Puedes explicar el significado semántico de tu consulta? O sea, como tal, de acuerdo a tus valores que es lo que quieres realmente hacer con la consulta?

Salu2s
En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: Duda consulta SQL
« Respuesta #4 en: 1 Junio 2016, 22:51 pm »

Como indicas, debes utilizar un alias para volver a utilizar de nuevo la tabla usuario y poder enlazar otra vez. Si no he interpretado mal, podría quedar así:

Código
  1. SELECT usuario.idusuario, usuario.nombreapellidos AS nombreusuario, usuarioamigos.idamigo, usuario2.nombreapellidos  AS nombreamigo
  2. FROM (usuario INNER JOIN usuarioamigos ON usuario.idusuario= usuarioamigos.idusuario)
  3. INNER JOIN usuario  usuario2 ON usuarioamigos.idamigo = usuario2.idusuario
  4. ORDER BY usuario.idusuario,usuarioamigos.idamigo
En línea

- Nice to see you again -
KaylaYJG

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Duda consulta SQL
« Respuesta #5 en: 3 Junio 2016, 08:35 am »

Si se requiere utilizar una tabla, dos o más veces dentro de una misma consulta, debes agregarle alias ya que si no lo haces, hace cosas muy raras!
De igual manera, si se requiere utilizar un mismo campo 2 o más veces, también debes agregar alias!
En línea

soyloqbuskas

Desconectado Desconectado

Mensajes: 218


¡El conocimiento es de todos!


Ver Perfil
Re: Duda consulta SQL
« Respuesta #6 en: 3 Junio 2016, 09:12 am »

Citar
Publicado por: DarK_FirefoX
Insertar Cita
Puedes explicar el significado semántico de tu consulta? O sea, como tal, de acuerdo a tus valores que es lo que quieres realmente hacer con la consulta?

Salu2s

Semánticamente lo que quiero hacer es sacar una lista con todos los usuarios y sus amigos asociados. Las tablas que tengo son: usuario(idusuario,nombreapellidos) y usuarioamigos(idusuario,idamigo). Y el resultado que debe sacar es el siguiente:

Citar
nombreapellidos    nombreapellidos
luis                     juan
luis                     pedro
luis                     mario
juan                    luis
juan                    pedro
juan                    mario

He probado a poner alias en la columna nombreapellidos que es la que necesito repetir pero me da un error...

Esta es la consulta que hago.
Código
  1. SELECT  usuario.nombreapellidos, usuario.nombreapellidos AS nombreAmigo FROM usuario
  2. INNER JOIN usuarioamigos ON usuario.idusuario=usuarioamigos.idusuario
  3. WHERE nombreAmigo IN(
  4. SELECT nombreAmigo FROM usuario
  5. INNER JOIN usuarioamigos ON usuario.idusuario=usuarioamigos.idamigo
  6. )
  7. ORDER BY usuario.idusuario
  8.  


Y el error que me da esta consulta en mysql es:
Citar
#1054 - Unknown column 'nombreAmigo' in 'IN/ALL/ANY subquery'

¿Alguna idea?
« Última modificación: 3 Junio 2016, 09:44 am por soyloqbuskas » En línea

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw
soyloqbuskas

Desconectado Desconectado

Mensajes: 218


¡El conocimiento es de todos!


Ver Perfil
Re: Duda consulta SQL
« Respuesta #7 en: 3 Junio 2016, 12:28 pm »

AL FIN DI CON LA RESPUESTA!! jeje

La consulta que queria hacer es la siguiente:

Código
  1. SELECT T1.idusuario, T1.nombreapellidos, usuarioamigos.idamigo, T2.nombreapellidos FROM usuarioamigos
  2. INNER JOIN usuario AS T1 ON usuarioamigos.idusuario=T1.idusuario
  3. INNER JOIN usuario AS T2 ON usuarioamigos.idamigo=T2.idusuario
  4. ORDER BY T1.idusuario, usuarioamigos

Muchas gracias por las pistas que me habeis dado!!

Un saludo a todos.
En línea

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw
HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: Duda consulta SQL
« Respuesta #8 en: 3 Junio 2016, 20:44 pm »

Pues enhorabuena por haberlo conseguido, pero vamos, que me dejas perplejo...
En línea

- Nice to see you again -
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda en consulta « 1 2 »
Bases de Datos
Kasswed 16 10,855 Último mensaje 16 Diciembre 2009, 03:47 am
por ^Tifa^
Duda con Consulta Sql
Bases de Datos
n3fisto 4 3,494 Último mensaje 8 Julio 2010, 04:22 am
por n3fisto
Duda consulta :S
Bases de Datos
patrickxxx 1 2,491 Último mensaje 17 Junio 2011, 20:28 pm
por Shell Root
duda con consulta sql
Bases de Datos
Mr.Blue 1 3,710 Último mensaje 4 Agosto 2011, 02:06 am
por Beakman
Duda consulta php.
PHP
elopez 4 2,579 Último mensaje 29 Mayo 2014, 23:51 pm
por Mokonauta
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines