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

Resultado consulta de dos tablas

Estas en el tema de Resultado consulta de dos tablas en el foro de Mysql en Foros del Web. Hola, Tengo una tabla donde guardo avisos y otra donde guardo los usuarios que se postulan en cada aviso. Necesito mostrar un listado con todos ...
  #1 (permalink)  
Antiguo 29/05/2012, 21:24
 
Fecha de Ingreso: noviembre-2006
Mensajes: 14
Antigüedad: 17 años, 5 meses
Puntos: 0
Resultado consulta de dos tablas

Hola,

Tengo una tabla donde guardo avisos y otra donde guardo los usuarios que se postulan en cada aviso.
Necesito mostrar un listado con todos los avisos y para un usuario x indicar si se postulo o no, aqui una imagen para verlo mas claro:



Como podría realizar esta consulta?
Probé haciendo joins pero me trae resultados repetidos y no me queda claro como generar el campo nuevo donde indico si existe en la otra tabla o no.

Desde ya muchas gracias por la ayuda!
Ariel
  #2 (permalink)  
Antiguo 30/05/2012, 01:03
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Resultado consulta de dos tablas

Primero obtenemos los avisos donde 3 se ha postulado

Código MySQL:
Ver original
  1. SELECT a.id
  2. FROM avisos a
  3. INNER JOIN postulacion p
  4. ON a.id=p.id_tabla_A
  5. WHERE p.id_usuario=3


Código MySQL:
Ver original
  1. SELECT av.id,
  2.              av.campo_texto,
  3.              if(Sbc.id IS NULL, false, true) as POSTULADO
  4. FROM avisos av
  5.         LEFT JOIN
  6.              () as Sbc
  7.         ON av.id=Sbc.id;

Donde Sbc es la primera query.


Código MySQL:
Ver original
  1. SELECT av.id,
  2.              av.campo_texto,
  3.              if(Sbc.id IS NULL, false, true) as POSTULADO
  4. FROM avisos av
  5.         LEFT JOIN
  6.              (SELECT a.id
  7.                 FROM avisos a
  8.                    INNER JOIN postulacion p
  9.                       ON a.id=p.id_tabla_A
  10.                  WHERE p.id_usuario=3) as Sbc
  11.         ON av.id=Sbc.id;

Esta es una podria haber mas....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 30/05/2012, 06:06
 
Fecha de Ingreso: noviembre-2006
Mensajes: 14
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Resultado consulta de dos tablas

Lo probé y funciona perfecto.
Gracias por tu respuesta!
  #4 (permalink)  
Antiguo 30/05/2012, 07:20
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Resultado consulta de dos tablas

Hola ari2006:

Tal como menciona quimfv hay otras maneras de obtener el mismo resultado. Aquí está otra forma, utilizando sólo un LEFT JOIN y sin hacer ninguna subconsulta.

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA;
  2. +------+-------------+
  3. | id   | campo_texto |
  4. +------+-------------+
  5. |    1 | Texto aaaa  |
  6. |    2 | Texto bbbb  |
  7. |    3 | Texto cccc  |
  8. |    4 | Texto dddd  |
  9. |    5 | Texto eeee  |
  10. +------+-------------+
  11. 5 rows in set (0.00 sec)
  12.  
  13. mysql> SELECT * FROM tablaB;
  14. +------+------------+------------+
  15. | id   | id_tabla_A | id_usuario |
  16. +------+------------+------------+
  17. |    1 |          2 |          1 |
  18. |    2 |          3 |          1 |
  19. |    3 |          4 |          2 |
  20. |    4 |          2 |          3 |
  21. |    5 |          3 |          3 |
  22. |    6 |          5 |          1 |
  23. +------+------------+------------+
  24. 6 rows in set (0.00 sec)
  25.  
  26. mysql> SELECT tablaA.id, tablaA.campo_texto,
  27.     -> IF(tablaB.id IS NULL, 'false', 'true') postulado
  28.     -> FROM tablaA
  29.     -> LEFT JOIN tablaB ON TablaA.id = tablaB.id_tabla_a
  30.     -> AND tablaB.id_usuario = 3;
  31. +------+-------------+-----------+
  32. | id   | campo_texto | postulado |
  33. +------+-------------+-----------+
  34. |    1 | Texto aaaa  | false     |
  35. |    2 | Texto bbbb  | true      |
  36. |    3 | Texto cccc  | true      |
  37. |    4 | Texto dddd  | false     |
  38. |    5 | Texto eeee  | false     |
  39. +------+-------------+-----------+
  40. 5 rows in set (0.00 sec)

Saludos
Leo.
  #5 (permalink)  
Antiguo 30/05/2012, 11:48
 
Fecha de Ingreso: noviembre-2006
Mensajes: 14
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Resultado consulta de dos tablas

Gracias Leo por tu respuesta!
Lo estoy probando y por lo que veo me parece que incluso de esta forma la respuesta es mas rápida, seguramente porque no tiene una subconsulta, no?
Gracias a ambos!
Saludos
Ariel
  #6 (permalink)  
Antiguo 30/05/2012, 13:39
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Resultado consulta de dos tablas

Hola de nuevo ari2006:

Es posible que la consulta sea más rápida efectivamente porque no se realiza ninguna subconsulta, es un simple LEFT JOIN con las condiciones adecuadas. De cualquier manera es importante que tengas una buena definición de índices, para que las consultas sean más ágiles.

Saludos
Leo.

Etiquetas: join, sql, tabla, tablas, resultados, campos
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 12:03.