none
Sql Server Query - Join RRS feed

  • Pergunta

  • Galera, uma ajudinha por favor, tenti fazer de tudo, porém não estou conseguindo. Minha query esta retornando os valores de forma errada, onde que estou fazendo errado ?

    SELECT
    id_serie,
    seriado,
    temporadas,
    box_completo,
    valor,
    parcelas,
    valor_parcela,
    frete,
    descricao,
    loja,
    data,
    url
    FROM serie
    LEFT JOIN frete ON serie.id_serie = frete.serie_id_serie
    LEFT JOIN valor ON serie.id_serie = valor.serie_id_serie
    LEFT JOIN loja ON serie.id_serie = loja.serie_id_serie
    WHERE
    url IS NOT NULL AND
    seriado = 'Breaking Bad'
    ORDER BY
    seriado;

    domingo, 20 de dezembro de 2015 23:44

Respostas

  • Igor conforme o questionamento do C Alberto,

    Ficou mais claro agora para identificar seu problema.

    Na sua tabela Frete o campo serie_id_serie esta repetindo o valor 1 para os três fretes existentes.

    Ou seja esta fazendo um plano cartesiano, para cada id_serie da tabela serie, ele multiplica por 3 da tabela frete depois multiplica por 3 da tabela valor, acredito que voce precise incrementar o campo serie_id_serie nessas tabelas também, para que a amarração possa ficar 1 para 1;

    Espero ter sido claro.

    Att

    Reginaldo Silva

    segunda-feira, 21 de dezembro de 2015 17:26

Todas as Respostas

  • Igor,

    Por favor, poste o resultado que está obtendo e o que você espera obter.

    []'s!


    /* Logan Destefani Merazzi - DBA | @LoganMerazzi | http://www.merazzi.eti.br
    Se a resposta for útil, vote nela. Se resolveu, marque-a como resposta. */

    segunda-feira, 21 de dezembro de 2015 11:26
  • no grid deveria estar aparecendo somente 3 linhas de resultado, porém retornou 27

    id_serie    seriado    temporadas    box_completo    valor    parcelas    valor_parcela    frete    descricao    loja    data    url
    1    Breaking Bad    5    S    139.90    2    69.95    0.00    Econ+¦mica    Submarino    2015-12-19    http://www.submarino.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-?chave=Recviu-comprou_Hs14&nm_origem=rec_produto_viu-comprou-1&nm_ranking_rec=4&WT.mc_id=HM_REC1_VT_4&DCSext.recom=Neemu_produto_viu-comprou-4
    1    Breaking Bad    5    S    139.90    2    69.95    0.00    Econ+¦mica    Submarino    2015-12-19    http://www.submarino.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-?chave=Recviu-comprou_Hs14&nm_origem=rec_produto_viu-comprou-1&nm_ranking_rec=4&WT.mc_id=HM_REC1_VT_4&DCSext.recom=Neemu_produto_viu-comprou-4
    1    Breaking Bad    5    S    139.90    2    69.95    0.00    convencional    Submarino    2015-12-19    http://www.submarino.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-?chave=Recviu-comprou_Hs14&nm_origem=rec_produto_viu-comprou-1&nm_ranking_rec=4&WT.mc_id=HM_REC1_VT_4&DCSext.recom=Neemu_produto_viu-comprou-4
    1    Breaking Bad    5    S    139.90    2    69.95    0.00    Econ+¦mica    Americanas    2015-12-19    http://www.americanas.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-
    1    Breaking Bad    5    S    139.90    2    69.95    0.00    Econ+¦mica    Americanas    2015-12-19    http://www.americanas.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-
    1    Breaking Bad    5    S    139.90    2    69.95    0.00    convencional    Americanas    2015-12-19    http://www.americanas.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-
    1    Breaking Bad    5    S    139.90    2    69.95    0.00    Econ+¦mica    ShopTime    2015-12-19    http://www.shoptime.com.br/produto/119725990/box-blu-ray-breaking-bad-a-colecao-completa-edicao-de-colecionador-16-discos-
    1    Breaking Bad    5    S    139.90    2    69.95    0.00    Econ+¦mica    ShopTime    2015-12-19    http://www.shoptime.com.br/produto/119725990/box-blu-ray-breaking-bad-a-colecao-completa-edicao-de-colecionador-16-discos-
    1    Breaking Bad    5    S    139.90    2    69.95    0.00    convencional    ShopTime    2015-12-19    http://www.shoptime.com.br/produto/119725990/box-blu-ray-breaking-bad-a-colecao-completa-edicao-de-colecionador-16-discos-
    1    Breaking Bad    5    S    206.91    4    51.73    0.00    Econ+¦mica    Submarino    2015-12-19    http://www.submarino.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-?chave=Recviu-comprou_Hs14&nm_origem=rec_produto_viu-comprou-1&nm_ranking_rec=4&WT.mc_id=HM_REC1_VT_4&DCSext.recom=Neemu_produto_viu-comprou-4
    1    Breaking Bad    5    S    206.91    4    51.73    0.00    Econ+¦mica    Submarino    2015-12-19    http://www.submarino.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-?chave=Recviu-comprou_Hs14&nm_origem=rec_produto_viu-comprou-1&nm_ranking_rec=4&WT.mc_id=HM_REC1_VT_4&DCSext.recom=Neemu_produto_viu-comprou-4
    1    Breaking Bad    5    S    206.91    4    51.73    0.00    convencional    Submarino    2015-12-19    http://www.submarino.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-?chave=Recviu-comprou_Hs14&nm_origem=rec_produto_viu-comprou-1&nm_ranking_rec=4&WT.mc_id=HM_REC1_VT_4&DCSext.recom=Neemu_produto_viu-comprou-4
    1    Breaking Bad    5    S    206.91    4    51.73    0.00    Econ+¦mica    Americanas    2015-12-19    http://www.americanas.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-
    1    Breaking Bad    5    S    206.91    4    51.73    0.00    Econ+¦mica    Americanas    2015-12-19    http://www.americanas.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-
    1    Breaking Bad    5    S    206.91    4    51.73    0.00    convencional    Americanas    2015-12-19    http://www.americanas.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-
    1    Breaking Bad    5    S    206.91    4    51.73    0.00    Econ+¦mica    ShopTime    2015-12-19    http://www.shoptime.com.br/produto/119725990/box-blu-ray-breaking-bad-a-colecao-completa-edicao-de-colecionador-16-discos-
    1    Breaking Bad    5    S    206.91    4    51.73    0.00    Econ+¦mica    ShopTime    2015-12-19    http://www.shoptime.com.br/produto/119725990/box-blu-ray-breaking-bad-a-colecao-completa-edicao-de-colecionador-16-discos-
    1    Breaking Bad    5    S    206.91    4    51.73    0.00    convencional    ShopTime    2015-12-19    http://www.shoptime.com.br/produto/119725990/box-blu-ray-breaking-bad-a-colecao-completa-edicao-de-colecionador-16-discos-
    1    Breaking Bad    5    S    263.92    5    52.78    0.00    Econ+¦mica    Submarino    2015-12-19    http://www.submarino.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-?chave=Recviu-comprou_Hs14&nm_origem=rec_produto_viu-comprou-1&nm_ranking_rec=4&WT.mc_id=HM_REC1_VT_4&DCSext.recom=Neemu_produto_viu-comprou-4
    1    Breaking Bad    5    S    263.92    5    52.78    0.00    Econ+¦mica    Submarino    2015-12-19    http://www.submarino.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-?chave=Recviu-comprou_Hs14&nm_origem=rec_produto_viu-comprou-1&nm_ranking_rec=4&WT.mc_id=HM_REC1_VT_4&DCSext.recom=Neemu_produto_viu-comprou-4
    1    Breaking Bad    5    S    263.92    5    52.78    0.00    convencional    Submarino    2015-12-19    http://www.submarino.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-?chave=Recviu-comprou_Hs14&nm_origem=rec_produto_viu-comprou-1&nm_ranking_rec=4&WT.mc_id=HM_REC1_VT_4&DCSext.recom=Neemu_produto_viu-comprou-4
    1    Breaking Bad    5    S    263.92    5    52.78    0.00    Econ+¦mica    Americanas    2015-12-19    http://www.americanas.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-
    1    Breaking Bad    5    S    263.92    5    52.78    0.00    Econ+¦mica    Americanas    2015-12-19    http://www.americanas.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-
    1    Breaking Bad    5    S    263.92    5    52.78    0.00    convencional    Americanas    2015-12-19    http://www.americanas.com.br/produto/116551955/colecao-dvd-breaking-bad-a-quimica-do-mal-a-serie-completa-21-discos-
    1    Breaking Bad    5    S    263.92    5    52.78    0.00    Econ+¦mica    ShopTime    2015-12-19    http://www.shoptime.com.br/produto/119725990/box-blu-ray-breaking-bad-a-colecao-completa-edicao-de-colecionador-16-discos-
    1    Breaking Bad    5    S    263.92    5    52.78    0.00    Econ+¦mica    ShopTime    2015-12-19    http://www.shoptime.com.br/produto/119725990/box-blu-ray-breaking-bad-a-colecao-completa-edicao-de-colecionador-16-discos-
    1    Breaking Bad    5    S    263.92    5    52.78    0.00    convencional    ShopTime    2015-12-19    http://www.shoptime.com.br/produto/119725990/box-blu-ray-breaking-bad-a-colecao-completa-edicao-de-colecionador-16-discos-

    segunda-feira, 21 de dezembro de 2015 11:54
  • Bom dia Igor,

    Acredito que seu problema esteja no "LEFT JOIN loja ON serie.id_serie = loja.serie_id_serie"

    Veja que no resultado ele traz três vezes a loja 2 Economica e 1 convencional, verifique nos campos chaves das tabelas, acredito que falte alguma amarração entre essas tabelas, falta mais alguma clausula para retirar esses duplicados.

    Att

    Reginaldo Silva

    • Sugerido como Resposta c Alberto segunda-feira, 21 de dezembro de 2015 12:59
    • Não Sugerido como Resposta c Alberto segunda-feira, 21 de dezembro de 2015 12:59
    segunda-feira, 21 de dezembro de 2015 12:40

  • CREATE TABLE serie (
    id_serie SMALLINT NOT NULL IDENTITY(1,1),
    seriado VARCHAR(120) NOT NULL,
    temporadas TINYINT NOT NULL,
    box_completo CHAR(1) NOT NULL,

    CONSTRAINT pk_serie PRIMARY KEY (id_serie),
    CONSTRAINT chk_Box CHECK (box_completo IN ('S','N'))
    );
    GO


    CREATE TABLE frete (
    id_frete SMALLINT NOT NULL IDENTITY(1,1),
    frete DECIMAL(5,2) DEFAULT 0,
    tempo_frete VARCHAR(20),
    descricao VARCHAR(30),
    serie_id_serie SMALLINT NOT NULL,

    CONSTRAINT pk_frete PRIMARY KEY (id_frete),
    CONSTRAINT fk_serieF FOREIGN KEY (serie_id_serie) REFERENCES serie(id_serie)
    );
    GO

    CREATE TABLE loja (
    id_loja SMALLINT NOT NULL IDENTITY(1,1),
    loja VARCHAR(50),
    url TEXT NOT NULL,
    data DATE NOT NULL DEFAULT GETDATE(),
    serie_id_serie SMALLINT NOT NULL,

    CONSTRAINT pk_loja PRIMARY KEY (id_loja),
    CONSTRAINT fk_serieL FOREIGN KEY (serie_id_serie) REFERENCES serie(id_serie),
    CONSTRAINT chk_Data CHECK (data >= '2015-12-19 00:00:00.000')
    );
    GO

    CREATE TABLE valor (
    id_valor SMALLINT NOT NULL IDENTITY(1,1),
    valor DECIMAL(6,2) NOT NULL,
    parcelas TINYINT DEFAULT 1,
    max_parcela TINYINT,
    valor_parcela DECIMAL(5,2),
    juro DECIMAL(4,2) DEFAULT NULL,
    serie_id_serie SMALLINT NOT NULL,

    CONSTRAINT pk_valor PRIMARY KEY (id_valor),
    CONSTRAINT fk_serieV FOREIGN KEY (serie_id_serie) REFERENCES serie(id_serie)
    );
    GO
    segunda-feira, 21 de dezembro de 2015 13:09
  • Igor,

    Pelo resultado que você enviou, uma duplicidade está ocorrendo devido a tabela que contem o campo descrição, mas há outra.

    Acho que esta faltando algum filtro na clausula, mas sem a ddl é dificil.

    Vai ajudar na análise se você apresentar a DDL das tabelas envolvidas.

    Sugiro que você utilize alias para as tabelas para o código ficar mais legível. Ajuda na procura de erros.

    segunda-feira, 21 de dezembro de 2015 13:10
  • Tinha acabado de postar o DDL, acho que voce nao viu..
    segunda-feira, 21 de dezembro de 2015 13:30
  • Igor,

    Favor poste o resultado das consultas abaixo para verificar se há duplicidade.

    select id_frete, frete, tempo_frete, descricao, serie_id_serie 
    FROM Frete 
    WHERE serie_id_serie in (select id_serie from serie WHERE seriado = 'Breaking Bad')
    go

    select valor, parcelas, valor_parcela, serie_id_serie 
    FROM valor
    WHERE serie_id_serie in (select id_serie from serie WHERE seriado = 'Breaking Bad')

    go


    segunda-feira, 21 de dezembro de 2015 14:02
  • id_frete    frete    tempo_frete    descricao    serie_id_serie
    1    0.00    8 dias +¦teis    Econ+¦mica    1
    16    0.00    8 dias +¦teis    Econ+¦mica    1
    22    0.00    8 dias +¦teis    convencional    1

    valor    parcelas    valor_parcela    serie_id_serie
    139.90    2    69.95    1
    206.91    4    51.73    1
    263.92    5    52.78    1

    segunda-feira, 21 de dezembro de 2015 14:23
  • Igor conforme o questionamento do C Alberto,

    Ficou mais claro agora para identificar seu problema.

    Na sua tabela Frete o campo serie_id_serie esta repetindo o valor 1 para os três fretes existentes.

    Ou seja esta fazendo um plano cartesiano, para cada id_serie da tabela serie, ele multiplica por 3 da tabela frete depois multiplica por 3 da tabela valor, acredito que voce precise incrementar o campo serie_id_serie nessas tabelas também, para que a amarração possa ficar 1 para 1;

    Espero ter sido claro.

    Att

    Reginaldo Silva

    segunda-feira, 21 de dezembro de 2015 17:26
  • Igor,

    A explicação do Reginaldo está perfeita.

    Espero que você tenha conseguido ajustar a consulta de acordo com a necessidade de negócio que seu programa precisa atender.

    Até mais...


    segunda-feira, 21 de dezembro de 2015 18:46
  • Reginaldo estou agradecido pelo seu auxilio e pelos demais, vi que o erro realmente esta na CONSTRAINT da table frete, que esta ligada  table serie e deveria estar na table loja.

    Muito Obrigado!

    segunda-feira, 21 de dezembro de 2015 21:53