none
Fazer INNER JOIN com 3 tabelas RRS feed

  • Pergunta

  • Pessoal 

    Estou tentando fazer um inner join com 3 tabelas, mas estou com um produto cartesiano.

    Tenho uma tabela de vendas aonde possuo informações dos clientes que efetuaram alguma compra e quais os produtos. 

    As outras duas tabelas referem-se: uma de clientes com cod de clientes e outra de produtos com os cod de produtos e demais informações inerentes. Na tabela de vendas possuo os cod de clientes e produtos. 

    grato,

    segunda-feira, 16 de outubro de 2017 02:01

Respostas

  • Pelo que li e entendi , vc tem um problema na normalização da sua tabela, eu não vi 3 tabelas no seu texto e sim 4 tabelas. vc talvez  esteja sofrendo por falta de uma tabela no seu modelo, vou dar uma explicação:

    Estou tentando fazer um inner join com 3 tabelas, mas estou com um produto cartesiano(Esse é o problema)

    Tenho uma tabela de vendas aonde possuo informações dos clientes

    aqui temos duas tabelas , uma de Vendas e outra de Cliente,  seque um exemplo:

    CREATE TABLE Clientes
    (
    CodCliente INT NOT NULL PRIMARY KEY IDENTITY(1,1),
    NomeCliente VARCHAR(200)
    )
    
    CREATE TABLE Vendas 
    (
     IdVenda INT NOT NULL PRIMARY KEY IDENTITY(1,1),
     NumeroVenda INT NOT NULL,
     CodCliente INT NOT NULL FOREIGN KEY REFERENCES Clientes(CodCliente)
    )


    Tenho uma tabela de vendas aonde possuo informações dos clientes que efetuaram alguma compra e quais os produtos. 

    como um cliente  pode efetuar uma ou mais vendas , as duas tabelas acima resolve.

    entretanto uma venda pode ser de um ou mais produtos , assim e um relacionamento  N X N

    veja o exemplo:

    CREATE TABLE Produtos 
    (
     Codproduto INT NOT NULL PRIMARY KEY IDENTITY(1,1),
     Nome VARCHAR(200),
     Preco DECIMAL(18,2)
    )
    
    CREATE TABLE VendasClientes 
    (
     IdVendaCliente  UNIQUEIDENTIFIER NOT NULL PRIMARY KEY DEFAULT(NEWSEQUENTIALID()),
     IdVenda INT NOT NULL FOREIGN KEY REFERENCES dbo.Vendas(IdVenda),
     IdProduto INT FOREIGN KEY REFERENCES dbo.Produtos(Codproduto)
    )

    Assim o modelo fica coerente.

    veja como fica :


    Wesley Neves - Brasilia-DF

     
    https://wesleyneves.wordpress.com/
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"





    quinta-feira, 19 de outubro de 2017 11:15
  • Deleted
    quinta-feira, 19 de outubro de 2017 11:49

Todas as Respostas

  • Luciano Lago,

        Tem duas formas de fazer. A minha preferida é assim. Exemplo:

    * tabela de vendas
       - CodCliente;
       - CodProduto;

    * tabela clientes
       - CodClientes;

    * tabela produtos
       - CodProduto;

    SELECT * 
    FROM Clientes C
    INNER JOIN Vendas V
        INNER JOIN Produtos P
        ON V.CodProduto = P.CodProduto
    ON C.CodCliente = V.CodCliente

        A outra forma é assim:

    INNER JOIN com 3 tabelas

    https://pt.stackoverflow.com/questions/72710/inner-join-com-3-tabelas

    SELECT * FROM TB_ContratoCotista
    INNER JOIN TB_Contrato ON TB_Contrato.id_contrato = TB_ContratoCotista.id_contrato
    INNER JOIN TB_Cotista ON TB_Cotista = TB_ContratoCotista.id_cotista

        VEJA TAMBÉM:

    ------------------------------------------------------

    Fazer INNER JOIN com 3 tabelas 

    https://social.msdn.microsoft.com/Forums/pt-BR/5356a208-f8e6-490d-9775-135a23b01170/fazer-inner-join-com-3-tabelas?forum=520

    ------------------------------------------------------

    INNER JOIN EM 3 TABELAS

    http://www.devmedia.com.br/forum/inner-join-em-3-tabelas/440619

    ------------------------------------------------------

    Como fazer a junção entre 3 tabelas com o JOIN?

    http://www.guj.com.br/t/como-fazer-a-juncao-entre-3-tabelas-com-o-join/89261

    ------------------------------------------------------

    22 - T-SQL - JOINS e INNER JOIN - Selecionar dados de duas ou mais tabelas - SQL Server

    Neste vídeo vamos mostrar como é possível combinar dados de duas ou mais tabelas

    https://youtu.be/4nbECYDlAwc

    ------------------------------------------------------

    []'s,
    Fabio I.

    • Sugerido como Resposta Fabio I segunda-feira, 16 de outubro de 2017 09:56
    segunda-feira, 16 de outubro de 2017 05:10
  • Luciano,

    Você poderia nos apresentar como esta definido o relacionamento entre estas tabelas?


    Pedro Antonio Galvao Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 18 de outubro de 2017 22:26
  • Pelo que li e entendi , vc tem um problema na normalização da sua tabela, eu não vi 3 tabelas no seu texto e sim 4 tabelas. vc talvez  esteja sofrendo por falta de uma tabela no seu modelo, vou dar uma explicação:

    Estou tentando fazer um inner join com 3 tabelas, mas estou com um produto cartesiano(Esse é o problema)

    Tenho uma tabela de vendas aonde possuo informações dos clientes

    aqui temos duas tabelas , uma de Vendas e outra de Cliente,  seque um exemplo:

    CREATE TABLE Clientes
    (
    CodCliente INT NOT NULL PRIMARY KEY IDENTITY(1,1),
    NomeCliente VARCHAR(200)
    )
    
    CREATE TABLE Vendas 
    (
     IdVenda INT NOT NULL PRIMARY KEY IDENTITY(1,1),
     NumeroVenda INT NOT NULL,
     CodCliente INT NOT NULL FOREIGN KEY REFERENCES Clientes(CodCliente)
    )


    Tenho uma tabela de vendas aonde possuo informações dos clientes que efetuaram alguma compra e quais os produtos. 

    como um cliente  pode efetuar uma ou mais vendas , as duas tabelas acima resolve.

    entretanto uma venda pode ser de um ou mais produtos , assim e um relacionamento  N X N

    veja o exemplo:

    CREATE TABLE Produtos 
    (
     Codproduto INT NOT NULL PRIMARY KEY IDENTITY(1,1),
     Nome VARCHAR(200),
     Preco DECIMAL(18,2)
    )
    
    CREATE TABLE VendasClientes 
    (
     IdVendaCliente  UNIQUEIDENTIFIER NOT NULL PRIMARY KEY DEFAULT(NEWSEQUENTIALID()),
     IdVenda INT NOT NULL FOREIGN KEY REFERENCES dbo.Vendas(IdVenda),
     IdProduto INT FOREIGN KEY REFERENCES dbo.Produtos(Codproduto)
    )

    Assim o modelo fica coerente.

    veja como fica :


    Wesley Neves - Brasilia-DF

     
    https://wesleyneves.wordpress.com/
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"





    quinta-feira, 19 de outubro de 2017 11:15
  • Muito boa colocação.


    Wesley Neves

    quinta-feira, 19 de outubro de 2017 12:03
  • Boa tarde,

    Se não houver retorno na thread, a mesma será encerrada.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 20 de outubro de 2017 18:57
    Moderador
  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 23 de outubro de 2017 17:05
    Moderador