Ir al contenido


Foto

consulta de 3 tablas


  • Por favor identifícate para responder
5 respuestas en este tema

#1 nilsemsolano

nilsemsolano

    Member

  • Miembros
  • PipPip
  • 14 mensajes

Escrito 10 marzo 2014 - 01:11

Hola a todos. Otra vez yo tengo un pequeño problema con una consulta de 3 tablas.

- grados
Id_grado
area1
area2
area3
maestro1
maestro2
maestro3

- Áreas
Id_area
Nombre

- Maestro
Id_maestro
Nombre

Lo que quiero es mostrar la consulta en esta forma.

Id_grado         10B
area1 011 Matemáticas
maestro1 012 Juan
area2 008 Sociales
maestro2         021 Pedro
area3 006 Física
maestro3         002 Ana

Pero solo me muestra es esto

Id_grado         10B
area1 011 Matemáticas
maestro1         012 Juan
area2 008
maestro2         021
area3 006
maestro3         002

Esta es la consulta que estoy tratando de aplicar

Select grados.Id_grado, area1, grados.area2, grados.area3, grados.maestro1,
grados.maestro2, grados.maestro3
from grados
inner join areas on (id_area=area1)
inner join maestros on (id_maestro=maestro1)

por favor que alguien me ayude

  • 0

#2 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 10 marzo 2014 - 03:21

Es sencillo: en los campos de tu select no están los nombres de los maestros 2 y 3 nio de las areas 2 y 3, por eso no salen.

Y recuerda ponerle un alias a cada tabla de la consulta o tendras problemas!



delphi
  1. select g.Id_grado, g.area1, a1.nombre, g.area2, , a2.nombre, g.area3, a3.nombre, g.maestro1, m1.nombre, g.maestro2, m2.nombre, g.maestro3, m3.nombre
  2. from grados g
  3. inner join areas a1 on (a1.id_area=g.area1)
  4. inner join areas a2 on (a2.id_area=g.area2)
  5. inner join areas a3 on (a3.id_area=g.area3)
  6. inner join maestros m1 on (m1.id_maestro=g.maestro1)
  7. inner join maestros m2 on (m2.id_maestro=g.maestro2)
  8. inner join maestros m3 on (m3.id_maestro=g.maestro3)



  • 0

#3 nilsemsolano

nilsemsolano

    Member

  • Miembros
  • PipPip
  • 14 mensajes

Escrito 10 marzo 2014 - 01:43

Ok, bien

Sigo teniendo problemas, me muetra los nombres de las materias pero si coloco los de los profesores me lanza el error:

Dynamic Error
SQL error code = -206
Column unknown
TUT01.NOMBRE
At line 12  column 7.



sql
  1. SELECT
  2. sln.id_salon,
  3.  
  4. sln.materia_uno, sln.materia_dos, sln.materia_tres, sln.materia_cuatro,
  5. sln.materia_cinco, sln.materia_seis, sln.materia_siete, sln.materia_ocho,
  6. sln.materia_nueve, sln.materia_diez, sln.materia_once, sln.materia_doce,
  7. sln.docente_uno, sln.docente_dos, sln.docente_tres, sln.docente_cuatro,
  8. sln.docente_cinco, sln.docente_seis, sln.docente_siete, sln.docente_ocho,
  9. sln.docente_nueve, sln.docente_diez, sln.docente_once, sln.docente_doce,
  10. mt01.nombre, mt02.nombre, mt03.nombre, mt04.nombre, mt05.nombre, mt06.nombre,
  11. mt07.nombre, mt08.nombre, mt09.nombre, mt10.nombre, mt11.nombre, mt12.nombre,
  12. tut01.nombre, tut02.nombre, tut03.nombre, tut04.nombre, tut05.nombre, tut06.nombre,
  13. tut07.nombre, tut08.nombre, tut09.nombre, tut10.nombre, tut11.nombre, tut12.nombre
  14.  
  15. FROM salones sln
  16. INNER JOIN materias mt01 ON (mt01.id_materia=sln.materia_uno)
  17. INNER JOIN materias mt02 ON (mt02.id_materia=sln.materia_dos)
  18. INNER JOIN materias mt03 ON (mt03.id_materia=sln.materia_tres)
  19. INNER JOIN materias mt04 ON (mt04.id_materia=sln.materia_cuatro)
  20. INNER JOIN materias mt05 ON (mt05.id_materia=sln.materia_cinco)
  21. INNER JOIN materias mt06 ON (mt06.id_materia=sln.materia_seis)
  22. INNER JOIN materias mt07 ON (mt07.id_materia=sln.materia_siete)
  23. INNER JOIN materias mt08 ON (mt08.id_materia=sln.materia_ocho)
  24. INNER JOIN materias mt09 ON (mt09.id_materia=sln.materia_nueve)
  25. INNER JOIN materias mt10 ON (mt10.id_materia=sln.materia_diez)
  26. INNER JOIN materias mt11 ON (mt11.id_materia=sln.materia_once)
  27. INNER JOIN materias mt12 ON (mt12.id_materia=sln.materia_doce)
  28.  
  29. INNER JOIN docentes tut01 ON (tut01.id_docente=sln.docente_uno)
  30. INNER JOIN docentes tut02 ON (tut02.id_docente=sln.docente_dos)
  31. INNER JOIN docentes tut03 ON (tut03.id_docente=sln.docente_tres)
  32. INNER JOIN docentes tut04 ON (tut04.id_docente=sln.docente_cuatro)
  33. INNER JOIN docentes tut05 ON (tut05.id_docente=sln.docente_cinco)
  34. INNER JOIN docentes tut06 ON (tut06.id_docente=sln.docente_seis)
  35. INNER JOIN docentes tut07 ON (tut07.id_docente=sln.docente_siete)
  36. INNER JOIN docentes tut08 ON (tut08.id_docente=sln.docente_ocho)
  37. INNER JOIN docentes tut09 ON (tut09.id_docente=sln.docente_nueve)
  38. INNER JOIN docentes tut10 ON (tut10.id_docente=sln.docente_diez)
  39. INNER JOIN docentes tut11 ON (tut11.id_docente=sln.docente_once)
  40. INNER JOIN docentes tut12 ON (tut12.id_docente=sln.docente_doce)




  • 0

#4 nilsemsolano

nilsemsolano

    Member

  • Miembros
  • PipPip
  • 14 mensajes

Escrito 10 marzo 2014 - 02:19

ok, disculpa pero tenia un error en TUT01.NOMBRE que en realidad era TUT01.NOMBRES.
ahora el problema es que tengo 20 cursos, pero solamente me esta mostrando 2
como podre solucionar esto, osea quiero que me muestre todos los cursos con sus respectivos nombres de materias y nombres de profeores.

les agradezco de antemano.
  • 0

#5 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 11 marzo 2014 - 02:27

En tu sql no aparece curso por ningun sitio, solo habla de salones, no?

Sin conocer el problema concreto no te puedo decir mucho mas.
  • 0

#6 rasaliad

rasaliad

    Newbie

  • Miembros
  • Pip
  • 8 mensajes

Escrito 18 marzo 2014 - 10:24

Hola nilsemsolano,

Te propongo que cambies tu base de datos a la siguiente estructura que te presento, entiendo que seria mas flexible, pues te permitira tener varios areas y profesores, ademas de otras ventanas.

Tendrias el siguiente resultado:



delphi
  1. SELECT *
  2. FROM VW_CURSOS
  3.  
  4.  
  5. GRADO  NOMBRE_GRADO AREA NOMBRE_AREA  PROFESOR NOMBRE_PROFESOR
  6.     101 GRADO 1              201  Matematica              301      PROFESOR 1
  7.     101 GRADO 1              202  Sociales                  302      PROFESOR 2
  8.     101 GRADO 1              203  Fisica                      303      PROFESOR 3
  9.     102 GRADO 2              201  Matematica              304      PROFESOR 4
  10.     102 GRADO 2              202  Sociales                  302      PROFESOR 2
  11.     102 GRADO 2              203  Fisica                      303      PROFESOR 3



La base de datos propuesta seria:



delphi
  1. SET SQL DIALECT 3;
  2.  
  3. SET NAMES NONE;
  4.  
  5. CREATE DATABASE 'C:\ejemplos\DATOS.fdb'
  6. USER 'SYSDBA'
  7. PAGE_SIZE 16384
  8. DEFAULT CHARACTER SET NONE;
  9. /******************************************************************************/
  10. /***                                Tablas                                ***/
  11. /******************************************************************************/
  12. CREATE TABLE AREAS (
  13.     ID_AREA  INTEGER NOT NULL,
  14.     NOMBRE  VARCHAR(50)
  15. );
  16.  
  17. CREATE TABLE CURSOS (
  18.     ID_GRADO    INTEGER NOT NULL,
  19.     ID_AREA      INTEGER NOT NULL,
  20.     ID_PROFESOR  INTEGER NOT NULL
  21. );
  22.  
  23. CREATE TABLE GRADOS (
  24.     ID_GRADO  INTEGER NOT NULL,
  25.     NOMBRE    VARCHAR(50)
  26. );
  27.  
  28. CREATE TABLE PROFESORES (
  29.     ID_PROFESOR  INTEGER NOT NULL,
  30.     NOMBRE      VARCHAR(50)
  31. );
  32. /******************************************************************************/
  33. /***                                Vistas                                ***/
  34. /******************************************************************************/
  35. CREATE VIEW VW_CURSOS(
  36.     GRADO,
  37.     NOMBRE_GRADO,
  38.     AREA,
  39.     NOMBRE_AREA,
  40.     PROFESOR,
  41.     NOMBRE_PROFESOR)
  42. AS
  43. select
  44.     cursos.id_grado,
  45.     grados.nombre,
  46.     cursos.id_area,
  47.     areas.nombre,
  48.     cursos.id_profesor,
  49.     profesores.nombre
  50. from profesores
  51.   inner join cursos on (profesores.id_profesor = cursos.id_profesor)
  52.   inner join grados on (cursos.id_grado = grados.id_grado)
  53.   inner join areas on (cursos.id_area = areas.id_area)
  54. ;
  55.  
  56. /******************************************************************************/
  57. /***                              Claves Primarias                          ***/
  58. /******************************************************************************/
  59. ALTER TABLE AREAS ADD CONSTRAINT PK_AREAS PRIMARY KEY (ID_AREA);
  60. ALTER TABLE CURSOS ADD CONSTRAINT PK_CURSOS PRIMARY KEY (ID_GRADO, ID_AREA, ID_PROFESOR);
  61. ALTER TABLE GRADOS ADD CONSTRAINT PK_GRADOS PRIMARY KEY (ID_GRADO);
  62. ALTER TABLE PROFESORES ADD CONSTRAINT PK_PROFESORES PRIMARY KEY (ID_PROFESOR);
  63.  
  64.  
  65. /******************************************************************************/
  66. /***                              Claves Foraneas                          ***/
  67. /******************************************************************************/
  68. ALTER TABLE CURSOS ADD CONSTRAINT FK_CURSOS_AREA FOREIGN KEY (ID_AREA) REFERENCES AREAS (ID_AREA);
  69. ALTER TABLE CURSOS ADD CONSTRAINT FK_CURSOS_GRADO FOREIGN KEY (ID_GRADO) REFERENCES GRADOS (ID_GRADO);
  70. ALTER TABLE CURSOS ADD CONSTRAINT FK_CURSOS_PROFESOR FOREIGN KEY (ID_PROFESOR) REFERENCES PROFESORES (ID_PROFESOR);



espero se de tu ayuda

saludos

Rafael Liriano
  • 0




IP.Board spam blocked by CleanTalk.