none
Como realizar un inner join entre varias tablas RRS feed

  • Pregunta

  • Tengo una tabla de registros… Esta tabla de registros tiene asociado un foreign key a una tabla llamada Regiones y asu vez regiones tiene un foreign key a una tabla estados… Algo asi…

    CREATE TABLE Estados(

          EstadoId INT PRIMARY KEY,

          Estado VARCHAR(50))

    CREATE TABLE Regiones(

          RegionId INT PRIMARY KEY,

          Region VARCHAR(50),

          EstadoId INT FOREIGN KEY REFERENCES Estados (EstadoId))

    CREATE TABLE Registros(

          RegistroId INT PRIMARY KEY IDENTITY (1, 1),

          RegionId INT FOREIGN KEY REFERENCES Regiones (RegionId))

     

    Un estado obviamente puede tener N regions. Ahora necesito hacer un query que me traiga todos los datos de la tabla Registros y su Estado.

    La siguiente data en Tabla Estados

    INSERT INTO Estados (EstadoId, Estado) VALUES (1, 'Estado1'), (2, 'Estado2'), (4, 'Estado3'), (8, 'Estado4'), (11, 'Estado5')


    La siguiente data e Tabla Regiones

     

    INSERT INTO Regiones (RegionId, Region, EstadoId) VALUES

          (1, 'Region1', 1), (2, 'Region2', 2), (3, 'Region3', 1), (4, 'Region4', 1), (5, 'Region5', 4), (8, 'Region6', 8), (9, 'Region7', 11)


    Tengo la siguiente data en tabla Registros

    INSERT INTO Registros (RegionId) VALUES

          (1), (2), (2), (2), (2),

          (2), (2), (3), (3), (4),

          (4), (4), (5), (8), (8),

          (8), (8), (8), (8), (9)

    Tengo los siguientes query…

    SELECT pub.RegistroId, RegionId FROM Registros pub     

    SELECT pub.RegistroId, est.Estado FROM Registros pub  INNER JOIN Regiones rg ON rg.EstadoId = pub.RegionId INNER JOIN Estados est ON est.EstadoId = rg.EstadoId 

     

    El primero de ellos me trae todos los registros que hay los cuales son 20, mientras que el segundo me esta trayendo mal la data, en lugar de traerme 20 registros me trae 18 y aparte de 18 me trae registros repetidos…

    En el caso de los registros con la región 1 me los trae 3 veces esto se debe a que en la tabla Region hay 3 regiones que tienen un mismo EstadoId asociado. Mientras que lo que tienen el RegonID = 8 ni me los trae.

    Que estoy haciendo mal? 

    lunes, 6 de junio de 2011 16:27

Respuestas

Todas las respuestas