none
Relacionaqr 4 Tabla en SQL Server RRS feed

  • Pregunta

  • Soy bastante novato en el tema de SQL Server y no se como relacionar 4 tablas, se como relacionar 2 pero no 4. Me podríanayudar?.

    select * from Turnos where IdTurno = 11150
    select * from Servicios where IdServicio = 11150
    select * from InfoEstadosServicio where IdInfoServicio = 11804
    select * from EstadosServicio where IdEstadoServicio = 1 

    select * from Turnos inner join Servicios on Turnos.IdTurno = Servicios.IdServicio inner join InfoEstadosServicio on Turnos.IdTurno = InfoEstadosServicio.IdInfoServicio inner join EstadosServicio on Turnos.IdTurno = EstadosServicio.IdEstadoServicio

    viernes, 30 de agosto de 2019 15:41

Respuestas

  • Hola Jupablacha18:

    Dos son igual que doscientas mil.

    Lo importante es saber que campo enlaza con cada tabla y que tipo de relación les une.

    Por ejemplo Turnos se relaciona con Servicios porque en cada fila de Turnos en la columna idTurno hay un número que apunta a un servicio en su columna idServicio.

    Por tanto como has puesto

    Select * from Turnos t inner join Servicios s on t.idTurno =s.idServicio.

    Ahora supongo que en la tabla Servicios habrá una columna que se llamará algo así como idEstadoServicio que encajará con idEstadoServicio de la tabla EstadosServicio.

    Si esto es correcto la consulta será de momento.

    Select * from Turnos t inner join Servicios s on t.idTurno = s.idServicio inner join EstadoServicio es on s.idEstadoServicio = es.idEstadoServicio.

    Un paso más alla, es si la tabla estadoServicio supongo que tendrá una columna que se llamará idInfoEstadoServicio que enlazará con una columna de la tabla infoEstadosServicio por su columna idInfoEstadoServicio.

    Y si esto es correcto tu consulta será:

    SELECT *
    FROM Turnos t
         INNER JOIN Servicios s ON t.idTurno = s.idServicio
         INNER JOIN EstadoServicio es ON s.idEstadoServicio = es.idEstadoServicio
         INNER JOIN infoEstadoServicio i ON es.idInfoServicio = I.idInfoServicio
    WHERE t.idTurno = 11150
          AND i.idInfoServicio = 11804
          AND es.IdEstadoServicio = 1;

    Esto sería lo razonable, si tus tablas tuvieran esas columnas y para cada turno, solo hubiera 1 servicio, y para cada servicio solo pudiese haber un estado, y para cada estado, solo pudiese haber un infoEstadoServicio.

    Pero todo esto, nosotros no lo podemos saber, porque ni sabemos como se llaman las columnas de tus tablas, ni de que tipo son, ni siquiera si su relación es 1 a 1 o 1 a varios o.....

    Esta información nos la tienes que facilitar tú.

    viernes, 30 de agosto de 2019 17:33
  • Muchas gracias por la ayuda, pero si me fije en eso, debe existir una relación para que una las tablas, ya lo solucione y quedo igual a tu solución, muchas gracias amigo.

    Suerte!

    viernes, 30 de agosto de 2019 18:12

Todas las respuestas

  • Hola Jupablacha18:

    Dos son igual que doscientas mil.

    Lo importante es saber que campo enlaza con cada tabla y que tipo de relación les une.

    Por ejemplo Turnos se relaciona con Servicios porque en cada fila de Turnos en la columna idTurno hay un número que apunta a un servicio en su columna idServicio.

    Por tanto como has puesto

    Select * from Turnos t inner join Servicios s on t.idTurno =s.idServicio.

    Ahora supongo que en la tabla Servicios habrá una columna que se llamará algo así como idEstadoServicio que encajará con idEstadoServicio de la tabla EstadosServicio.

    Si esto es correcto la consulta será de momento.

    Select * from Turnos t inner join Servicios s on t.idTurno = s.idServicio inner join EstadoServicio es on s.idEstadoServicio = es.idEstadoServicio.

    Un paso más alla, es si la tabla estadoServicio supongo que tendrá una columna que se llamará idInfoEstadoServicio que enlazará con una columna de la tabla infoEstadosServicio por su columna idInfoEstadoServicio.

    Y si esto es correcto tu consulta será:

    SELECT *
    FROM Turnos t
         INNER JOIN Servicios s ON t.idTurno = s.idServicio
         INNER JOIN EstadoServicio es ON s.idEstadoServicio = es.idEstadoServicio
         INNER JOIN infoEstadoServicio i ON es.idInfoServicio = I.idInfoServicio
    WHERE t.idTurno = 11150
          AND i.idInfoServicio = 11804
          AND es.IdEstadoServicio = 1;

    Esto sería lo razonable, si tus tablas tuvieran esas columnas y para cada turno, solo hubiera 1 servicio, y para cada servicio solo pudiese haber un estado, y para cada estado, solo pudiese haber un infoEstadoServicio.

    Pero todo esto, nosotros no lo podemos saber, porque ni sabemos como se llaman las columnas de tus tablas, ni de que tipo son, ni siquiera si su relación es 1 a 1 o 1 a varios o.....

    Esta información nos la tienes que facilitar tú.

    viernes, 30 de agosto de 2019 17:33
  • Muchas gracias por la ayuda, pero si me fije en eso, debe existir una relación para que una las tablas, ya lo solucione y quedo igual a tu solución, muchas gracias amigo.

    Suerte!

    viernes, 30 de agosto de 2019 18:12
  • De nada.
    viernes, 30 de agosto de 2019 18:15
  • Amigo otra pregunta, debo conectar valores de diferentes tablas en solo 1 sabes como se puede hacer?.

     select IdTurno from H_Turnos where IdTurno = 1 
     select IdServicio from H_Servicios where IdServicio = 1
     select Inicio from H_InfoEstadosServicio  where Inicio = ('2019-07-12 09:44:39.683')
     select Fin from H_InfoEstadosServicio where Fin = ('2019-07-12 09:47:27.737')
     select Nombre from EstadosServicio where Nombre = ('EnEspera') 
     select Nombre from EstadosServicio where Nombre = ('Llamando') 
     select Nombre from EstadosServicio where Nombre = ('EnAtencion') 
     select Nombre from EstadosServicio where Nombre = ('Finalizado') 

    viernes, 30 de agosto de 2019 20:36
  • Deleted
    viernes, 30 de agosto de 2019 21:39