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

Consulata con INNER JOIN

Estas en el tema de Consulata con INNER JOIN en el foro de SQL Server en Foros del Web. Hola a todos estoy tratando de hacer una consulta a dos tablas, bueno resulta que nunca lo eh echo, ahorita estoy haciendo la consulta a ...
  #1 (permalink)  
Antiguo 03/12/2009, 19:14
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 14 años, 9 meses
Puntos: 0
Pregunta Consulata con INNER JOIN

Hola a todos estoy tratando de hacer una consulta a dos tablas, bueno resulta que nunca lo eh echo, ahorita estoy haciendo la consulta a una sola y me resulta bien pero al querer meter otra consulta igual me manda error.

busque la solucion y vi que necesitaba la funcion INNER JOIN, pero honestamente no supe como implementarla.

Código SQL:
Ver original
  1. $sql=mysql_query("SELECT * FROM registros, referencias WHERE registros.numeroID = referencias.numeroID LIKE '%$search%' ORDER BY registrado");

Quiero consultar en las tablas "registros" y "referencias", pero las columnas de ambas tablas tienen nombres iguales, como le hago para que salga bien y sin errores?

Saludos!

Última edición por tampon; 03/12/2009 a las 19:23
  #2 (permalink)  
Antiguo 03/12/2009, 20:15
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Consulata con INNER JOIN

La estructura basica es:

SELECT t1.clienteid, t2.TotalVentas
FROM cliente t1 inner join ventas t2 on t1.idcliente = t2.idcliente
  #3 (permalink)  
Antiguo 03/12/2009, 20:20
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Consulata con INNER JOIN

Amigo no te entendi, la respuesta me parecio lo mismo que los otros articulos que lei y que no les entendi ni papa.
ya que tu si entiendes la logica podrias hacer un ejemplo basandote los nombres de las tablas que puse?

por que despues del FROM no te entiendo nada.

Saludos
  #4 (permalink)  
Antiguo 04/12/2009, 05:11
 
Fecha de Ingreso: septiembre-2005
Mensajes: 135
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Consulata con INNER JOIN

Te intenraré responder yo, espero ayudarte. La expresión correcta es la que te ha comentado iislas y a continuación intento explicarte esa sentencia.

SELECT * FROM registros, referencias WHERE registros.numeroID = referencias.numeroID LIKE '%$search%' ORDER BY registrado");

Tu consulta debería quedar algo parecido a esto.

SELECT *
FROM registros reg INNER JOIN referencias ref
ON reg.numeroID = ref.numeroID
WHERE ....


Es decir, para relacionar tus dos tablas es necesario indicarle mediante que campos se va a relacionar, y debido a que los campos se llaman igual se utilizan alias en las tablas (reg y ref) que se ponen a continuación del nombre de la tabla en la clausula FROM.

Para relacionarlas utilizamos la clausula INNER JOIN, de modo que queda tabla1 INNER JOIN tabla 2 y evidentemente tenemos que decirle mediante que campo se relacionan, eso con la clausula ON y a continuación igualando los campos de relación.

Posteriormente, una vez realizadas estas clausulas pondremos todas las clausulas WHERE que decidamos.

Si no me explico muy bien, dimelo e intento ayudarte.

Salu2.
  #5 (permalink)  
Antiguo 04/12/2009, 09:35
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Consulata con INNER JOIN

Ok Lebennin, muchas gracias por la explicacion, ya me quedo mas claro, voy a intentar hacerlo de ese modo, y luego comento.

Saludos.


-----------




Bueno ya lo hice y no me manda ninguna consulta, esta es parte de el codigo que llevo.


Código sql:
Ver original
  1. $sql=mysql_query("SELECT * FROM registros reg INNER JOIN referencias ref ON reg.numeroID = ref.numeroID WHERE reg.numeroID '%$search%' ORDER BY reg.registrado");
  2.  
  3. $count=mysql_num_rows($sql);
  4.  
  5. while($row=mysql_fetch_array($sql)){
  6. $nombre=$row['reg.nombre'];
  7. $IDnum=$row['reg.numeroID'];
  8. $valor= $row['reg.pago'];
  9.  
  10.   echo "<p>" . $nombre . "</p>";
  11.   echo "<p>" . $IDnum . "</p>";
  12.   echo "<p> $ " . $valor . "</p>";
  13. }

Y no me arroja ningun resultado, ahorita estoy intentando imprimir los resultados de la consulta a la tabla registros, pero tambien voy a necesitar imprimir otros datos de la tabla referencias, supongo que tambien les asigno una variable haciendo referencia a la tabla y su columna, pero como aun no lo hago por que no me sale lo primero, entonces no se si este en lo corresco.

alguna sugerencia?

saludos.

Última edición por tampon; 04/12/2009 a las 10:35
  #6 (permalink)  
Antiguo 04/12/2009, 10:58
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Consulata con INNER JOIN

Ya pude hacer la consulta de la primera tabla, solo le quite:


Código sql:
Ver original
  1. $nombre=$row['reg.nombre'];
  2. $IDnum=$row['reg.numeroID'];
  3. $valor= $row['reg.pago'];

pero ahora como le hago para imprimir las columnas de la tabla referencias que tambien se llaman nombre y numeroID??

saludos.
  #7 (permalink)  
Antiguo 04/12/2009, 11:02
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Consulata con INNER JOIN

Disculpa, ¿Es SQL SERVER lo que estas usando?, digo, si es MYSQL, estas equivocado de foro....
  #8 (permalink)  
Antiguo 04/12/2009, 11:32
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Consulata con INNER JOIN

Si tienes razon es mySQL... rayos me equivoque de foro! pero como me cambio?

saludos.
  #9 (permalink)  
Antiguo 04/12/2009, 11:50
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: Consulata con INNER JOIN

Creo que mucho no importa porque estás usando una sentencia muy ANSI-SQL, y eso lo interpretan bien todos los DBMS.
Para poder cambiarle el nombre a los campos no puedes usar SELECT * , tienes que poner el nombre de cada campo que necesitas de cada tabla en el SELECT, precedido por el alias y un punto, y luego de un espacio poner el alias, por ejemplo:
Código sql:
Ver original
  1. SELECT reg.campo1 c1, REF.campo1 c2, reg.campo2 c3,
  2. FROM registros reg INNER JOIN referencias REF ON reg.numeroID = REF.numeroID
  3. WHERE reg.numeroID '%$search%'
  4. ORDER BY reg.registrado")
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 04/12/2009, 12:01
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Consulata con INNER JOIN

Ya esta resuelto todo, gracias.

--

aah gracias gnzsoloyo, no habia visto tu comentario lo checare para tener otra alternativa para hacerlo.

saludos.
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 23:43.