Union de tablas

Iniciado por Ethgar, 19 Septiembre 2014, 19:09 PM

0 Miembros y 1 Visitante están viendo este tema.

Ethgar

Que tal, ahora con un problema que me surgio al unir dos tabas; les explico:
tabla1:
Id       | Clave   |Articulo
023       3337      PC
024       3337      Impresora
025       3337      Monitor
026       3337      Disco Duro

Tabla2:
Id_Accesorios   | Clave      |  Id_Articulo   CableVGA  | CableCorriente
85                       3337          023                 si                  si
86                       3337          024                 no                 si

En tabla1 guardo los artículos de un inventario y en la tablados guardo solo los artículos que tienen accesorios, el problema es que al querer imprimir una tabla con la descripción del articulo y la lista de accesorios, como resultado la consulta solo me arroja los dos registros (PC, Impresora). Esta es mi consulta:
$accesorios = mysql_query("SELECT a.clave,a.Articulo,b.CableVGA,b.CableCorriente FROM Tabla1 as a INNER JOIN Tabla2 as b on a.Clave = b.Clave WHERE Clave = 3337");
lo que deseo es que me arroje los 4 registros aunque no estén los otros dos registros (Monitor, Disco duro) en la tabla2.

MinusFour

Dudo mucho si quiera que la consulta esa te funcione:

a.clave no existe, sería a.Clave. Lo mismo al final del WHERE debe ser a.Clave o b.Clave, de otra forma Clave es muy ambiguo.

Carloswaldo

Lo que necesitas es un LEFT OUTER JOIN

Pero antes que nada, una duda ¿por qué haces el join con "Clave" y no con "Id_Articulo"?

Para mi quedaría algo así como

Código (sql) [Seleccionar]
SELECT a.Clave, a.Articulo, b.CableVGA, b.CableCorriente FROM Tabla1 as a LEFT OUTER JOIN Tabla2 as b on a.Id = b.IdArticulo WHERE a.Clave = 3337

Ethgar

Cita de: Carloswaldo en 19 Septiembre 2014, 23:44 PM
Lo que necesitas es un LEFT OUTER JOIN

Pero antes que nada, una duda ¿por qué haces el join con "Clave" y no con "Id_Articulo"?

Para mi quedaría algo así como

Código (sql) [Seleccionar]
SELECT a.Clave, a.Articulo, b.CableVGA, b.CableCorriente FROM Tabla1 as a LEFT OUTER JOIN Tabla2 as b on a.Id = b.IdArticulo WHERE a.Clave = 3337
Lo que pasa es que en mi tabla tengo cientos demismos articulos pero con diferente clave, lo que quiero es el resultado de la clave digao que la clave es un folio de una compra por decir algo, me interesa elresultado de esa compra y lo saco con la Clave, no se i e explique, gracias por tu respuesta, checare LEFT OUTER JOIN.

Ethgar

Cita de: Carloswaldo en 19 Septiembre 2014, 23:44 PM
Lo que necesitas es un LEFT OUTER JOIN

Pero antes que nada, una duda ¿por qué haces el join con "Clave" y no con "Id_Articulo"?

Para mi quedaría algo así como

Código (sql) [Seleccionar]
SELECT a.Clave, a.Articulo, b.CableVGA, b.CableCorriente FROM Tabla1 as a LEFT OUTER JOIN Tabla2 as b on a.Id = b.IdArticulo WHERE a.Clave = 3337
Brother me resolviste el problema, me arroja los registros completos, muchas gracias, te llevas el crédito. Saludos!!

Carloswaldo

Cita de: Ethgar en 20 Septiembre 2014, 06:46 AM
Lo que pasa es que en mi tabla tengo cientos demismos articulos pero con diferente clave, lo que quiero es el resultado de la clave digao que la clave es un folio de una compra por decir algo, me interesa elresultado de esa compra y lo saco con la Clave, no se i e explique, gracias por tu respuesta, checare LEFT OUTER JOIN.

Aún así, eso ya lo estás haciendo cuando pones el "WHERE a.Clave = 3337", el JOIN debe ser con el ID del producto, o aún mejor... hacer el JOIN con los 2 valores.