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

Problema con INNER JOIN

Estas en el tema de Problema con INNER JOIN en el foro de Mysql en Foros del Web. Saludos: Estoy creando una aplicación que al accederla automáticamente debe traer los datos que se van a manejar. Decidí crear dos tablas, una que contiene ...
  #1 (permalink)  
Antiguo 14/07/2010, 15:16
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Problema con INNER JOIN

Saludos:

Estoy creando una aplicación que al accederla automáticamente debe traer los datos que se van a manejar. Decidí crear dos tablas, una que contiene la información y la otra que guarda quién está trabajando en algún caso. La idea es que cuando una persona reciba el caso, si otra persona se loguea continúe con otro caso, todo esto de forma automática. Ejemplo
Código MySQL:
Ver original
  1. mysql> show create table tabla1;
  2.  
  3. | tabla1 | CREATE TABLE `tabla1` (
  4.   `id` int(11) NOT NULL AUTO_INCREMENT,
  5.   `name` varchar(30) DEFAULT NULL,
  6.   PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 |
  8.  
  9. 1 row in set (0.00 sec)
  10.  
  11. mysql> INSERT INTO tabla1 VALUES (NULL, 'foo'), (NULL, 'bar'), (NULL, 'baz');
  12. Query OK, 3 rows affected (0.00 sec)
  13. Records: 3  Duplicates: 0  Warnings: 0
  14.  
  15. mysql> SELECT * FROM tabla1;
  16. +----+------+
  17. | id | name |
  18. +----+------+
  19. |  1 | foo  |
  20. |  2 | bar  |
  21. |  3 | baz  |
  22. +----+------+
  23. 3 rows in set (0.00 sec)
  24.  
  25. mysql> show create table tabla2;
  26. | tabla2 | CREATE TABLE `tabla2` (
  27.   `id` int(11) NOT NULL AUTO_INCREMENT,
  28.   `id_tabla1` int(11) NOT NULL,
  29.   PRIMARY KEY (`id`)
  30. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
  31.  
  32. 1 row in set (0.00 sec)
  33.  
  34.  
  35. mysql> select * from tabla2;
  36. Empty set (0.00 sec)

Cuando hago esta consulta
Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla1 t INNER JOIN tabla2 tt ON tt.id_tabla1 != t.id;
  2. Empty set (0.00 sec)
El problema es como tabla2 no tiene datos no muestra la información. Pero si coloco un dato de ahí en adelante funciona y me muestra los datos que no están en la tabla2. Hay alguna forma de lograr que cuando no haya datos en la tabla2 pueda mostrar entonces los datos de la tabla1. Con PHP sé como hacerlo con condiciones, primero verifico si hay datos en la tabla2 y con un else logro mostrarlo. Traté de hacerlo con el IF de mysql pero al parecer no sé como trabajar con un IF verificando la consulta

Edito:
Si hay otra forma "más mejor" me dejan saber.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 14/07/2010 a las 15:25
  #2 (permalink)  
Antiguo 14/07/2010, 15:27
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 9 meses
Puntos: 150
Respuesta: Problema con INNER JOIN

Prueba LEFT JOIN en vez de INNER JOIN, de hecho no se si es una cagada, pero yo jamas uso INNER, siempre LEFT.
  #3 (permalink)  
Antiguo 14/07/2010, 15:36
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Problema con INNER JOIN

Es verdad no me acordaba que puedo usar LEFT JOIN (tanta explicación para que en una sola línea me des respuesta, trata la próxima vez de hacer dos líneas para no sentirme tan frustrado ). Bueno de esta forma puedo lograrlo con o sin datos en la tabla2.
Código MySQL:
Ver original
  1. SELECT * FROM tabla1 t LEFT JOIN tabla2 tt ON tt.id_tabla1 = t.id WHERE tt.id is null
Si hay una forma más eficiente me dejan saber
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: join
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 15:50.