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

Subconsulta con tres tablas

Estas en el tema de Subconsulta con tres tablas en el foro de Mysql en Foros del Web. Buen dia amigos, necesito consultar tres tablas relacionadas a la vez. dos de ellas ya me arroja el resultado que espero pero cuando trato de ...
  #1 (permalink)  
Antiguo 19/11/2014, 22:42
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 7 meses
Puntos: 0
Subconsulta con tres tablas

Buen dia amigos, necesito consultar tres tablas relacionadas a la vez. dos de ellas ya me arroja el resultado que espero pero cuando trato de consultar la tercera tabla me arroja error. bueno tengo la tabla tema, dilig_cuest y expertos con los siguientes campos:

Código SQL:
Ver original
  1. tema
  2. -----------
  3. cod_tema
  4. dtalle_tema
  5. cod_esp
  6. cod_estado
  7. cod_admin
  8.  
  9. dilig_cuest
  10. --------------
  11. cod_dilig_cuest
  12. cod_crear_cuest
  13. cod_experto
  14. cod_tema
  15. cod_color
  16. justificacion
  17.  
  18. cod_experto
  19. ----------------
  20. nombres
  21. apellidos
  22. cod_esp

Realizo la consulta con LEFT OUTER JOIN entre la tabla tema y dilig_cuest de esta forma y me arroja bien la consulta

Código MySQL:
Ver original
  1. SELECT *  FROM tema  LEFT OUTER JOIN dilig_cuest ON tema.cod_tema=dilig_cuest.cod_tema WHERE dilig_cuest.cod_tema IS NULL

Ahora quiero incluir otra condición a la consulta con una subconsulta con el campo cod_esp de la table tema y cod_esp de la tabla expertos. de esta manera:

Código MySQL:
Ver original
  1. SELECT * FROM tema LEFT OUTER JOIN(SELECT expertos.cod_experto,expertos.cod_esp FROM expertos                         WHERE expertos.cod_experto=10) Sbc dilig_cuest ON tema.cod_tema=dilig_cuest.cod_tema AND tema.cod_esp=Sbc.cod_esp WHERE dilig_cuest.cod_tema IS NULL

este es el error que me muestra:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'dilig_cuest ON tema.cod_tema = dilig_cuest.cod_tema AND tema.cod_esp = Sbc.cod_e' at line 1

algun compañero que me colabore por favor.
  #2 (permalink)  
Antiguo 20/11/2014, 01:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Subconsulta con tres tablas

Código PHP:
Ver original
  1. SELECT *  
  2.       FROM tema t  
  3.                   LEFT JOIN dilig_cuest e ON t.cod_tema=d.cod_tema
  4.                   LEFT JOIN expertos esp ON t.cod_esp=esp.cod_esp
  5.                   LEFT JOIN espertos exp ON d.cod_experto=exp.cod_experto
  6. WHERE dilig_cuest.cod_tema IS NULL

No se si te acabo de entender pero por los campos que tienes definidos el especialista de tema y el experto de dilig_cuest no tienen porque ser la misma persona de la tabla expertos, luego debes permitir que la consulta los consulte por separado. Si siempre son la misma persona luego sobraria uno de los campos.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 20/11/2014, 16:43
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Subconsulta con tres tablas

Hola quimfv, lo que pasa es que estoy haciendo un sistema de debate en donde cada experto(usuario) debe responder un tema, es decir, que con este query estoy listando los temas que le hace falta por responder al experto que esté en sesión:

Código SQL:
Ver original
  1. SELECT t.* FROM tema t LEFT OUTER JOIN (SELECT dilig_cuest.cod_tema,dilig_cuest.cod_experto
  2. FROM dilig_cuest WHERE dilig_cuest.cod_experto=10) Sbc ON t.cod_tema=Sbc.cod_tema   WHERE Sbc.cod_tema IS NULL

Ahora, al momento de crear cada experto se debe saber en que tema es especializado, por este motivo en la tabla "expertos" tiene el campo "cod_esp" que permite identificar en que tema se especializa. Ahora debo mostrar los temas que le debe aparecer a cada experto para responder ya que en la tabla "tema" tambien se guarda la especializacion del tema que trata con "cod_esp" algo asi como expertos.cod_esp=tema.cod_esp la cual estoy tratando de hacer en esta subconsulta pero no me realiza el filtro sino al contrario, me diplica los registros.

Código SQL:
Ver original
  1. SELECT t.*
  2.                 FROM tema t
  3.                 LEFT OUTER JOIN (SELECT dilig_cuest.cod_tema,dilig_cuest.cod_experto
  4.                            FROM dilig_cuest
  5.                            WHERE dilig_cuest.cod_experto=$codigo_experto) Sbc ON t.cod_tema=Sbc.cod_tema
  6.                 LEFT OUTER JOIN(SELECT expertos.cod_experto,expertos.cod_esp FROM expertos) Sbc1 ON t.cod_esp=Sbc1.cod_esp
  7.                 WHERE Sbc.cod_tema IS NULL
  #4 (permalink)  
Antiguo 20/11/2014, 21:16
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Subconsulta con tres tablas

Estuve trabajando al codigo y por poco me sale lo que quería, solamente que me sale este error:

Código SQL:
Ver original
  1. SELECT d.*
  2. FROM dilig_cuest d
  3. LEFT OUTER JOIN
  4.  (SELECT expertos.cod_experto,expertos.cod_esp,tema.cod_esp,expertos.nombres,tema.dtalle_tema,tema.cod_tema
  5. FROM expertos,tema
  6. WHERE expertos.cod_esp=tema.cod_esp AND cod_experto=12) Sbc
  7. ON d.cod_tema=Sbc.cod_tema
  8. WHERE Sbc.cod_tema IS NULL

#1060 - Duplicate column name 'cod_esp'

Segun el error es que se duplico la columna 'cod_esp' en la consulta, pero entonces que otro modo me sugeririan.

Etiquetas: campo, join, select, sql, subconsulta, tabla, tablas, tres
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 08:49.