INNER JOIN
Bom dia a todos,
Tenho três tabelas (NFe, contratos e despesas).
Preciso fazer uma consulta onde obtenha os dados por [Ô]contrato[Ô] das tabelas [Ô]despesas[Ô] e [Ô]NFe[Ô],
O campo codigo_contrato existe nas três tabelas.
Escrevi o seguinte código, que não da erro mas também não funcioina.
O BD é Access.
Se alguém puder ajudar,
Wagner
gstSQL_Final = [Ô][Ô]
gstSQL_Final = [Ô]SELECT ctt.Titulo, nfe.Numero_NFE, nfe.numero_nfe_substituida, nfe.cidade_serviço, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] nfe.dia_emissao_NFe, nfe.mes_emissao_NFe, nfe.ano_emissao_NFe, nfe.codigo_contrato, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] nfe.dia_recebimento_1_NFe, nfe.mes_recebimento_1_NFe, nfe.ano_recebimento_1_NFe, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] nfe.dia_recebimento_2_NFe, nfe.mes_recebimento_2_NFe, nfe.ano_recebimento_2_NFe, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] nfe.valor_serviço_bruto, nfe.valor_serviço_liquido_1, nfe.valor_serviço_liquido_2, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] ctf.valor_real, ctf.mes_pagamento, ctf.ano_pagamento, ctf.codigo_contrato[Ô]
gstSQL_Final = gstSQL_Final & [Ô] FROM ((custo_total_df as ctf [Ô]
gstSQL_Final = gstSQL_Final & [Ô] inner join NFe as nfe on ctf.codigo_contrato = nfe.codigo_contrato)[Ô]
gstSQL_Final = gstSQL_Final & [Ô] inner join contratos as ctt on ctt.codigo_contrato = ctf.codigo_contrato) [Ô]
gstSQL_Final = gstSQL_Final & [Ô] where [Ô] & gstSQL_Where
gstSQL_Final = gstSQL_Final & [Ô] order by [Ô] & gstSQL_order
MsgBox [Ô]string : [Ô] & gstSQL_Final
Tenho três tabelas (NFe, contratos e despesas).
Preciso fazer uma consulta onde obtenha os dados por [Ô]contrato[Ô] das tabelas [Ô]despesas[Ô] e [Ô]NFe[Ô],
O campo codigo_contrato existe nas três tabelas.
Escrevi o seguinte código, que não da erro mas também não funcioina.
O BD é Access.
Se alguém puder ajudar,
Wagner
gstSQL_Final = [Ô][Ô]
gstSQL_Final = [Ô]SELECT ctt.Titulo, nfe.Numero_NFE, nfe.numero_nfe_substituida, nfe.cidade_serviço, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] nfe.dia_emissao_NFe, nfe.mes_emissao_NFe, nfe.ano_emissao_NFe, nfe.codigo_contrato, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] nfe.dia_recebimento_1_NFe, nfe.mes_recebimento_1_NFe, nfe.ano_recebimento_1_NFe, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] nfe.dia_recebimento_2_NFe, nfe.mes_recebimento_2_NFe, nfe.ano_recebimento_2_NFe, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] nfe.valor_serviço_bruto, nfe.valor_serviço_liquido_1, nfe.valor_serviço_liquido_2, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] ctf.valor_real, ctf.mes_pagamento, ctf.ano_pagamento, ctf.codigo_contrato[Ô]
gstSQL_Final = gstSQL_Final & [Ô] FROM ((custo_total_df as ctf [Ô]
gstSQL_Final = gstSQL_Final & [Ô] inner join NFe as nfe on ctf.codigo_contrato = nfe.codigo_contrato)[Ô]
gstSQL_Final = gstSQL_Final & [Ô] inner join contratos as ctt on ctt.codigo_contrato = ctf.codigo_contrato) [Ô]
gstSQL_Final = gstSQL_Final & [Ô] where [Ô] & gstSQL_Where
gstSQL_Final = gstSQL_Final & [Ô] order by [Ô] & gstSQL_order
MsgBox [Ô]string : [Ô] & gstSQL_Final
Ribeirosa o problema pode estar no inner join, pois o comando inner join o registro existir nas tabelas de comparação para poder trazer o resultado, caso em uma das tabelas não tenha, ele tras em branco mesmo. O que vc pode fazer é o seguinte, usar o left join no lugar do inner join. Acho que com isso irá resilver o seu problema e os parentes não precisa colocar 2, apenas 1 é o suficiente , ficaria algo assim a sua busca nas tabelas
FROM (custo_total_df as ctf
left join NFe as nfe on ctf.codigo_contrato = nfe.codigo_contrato)
left join contratos as ctt on ctt.codigo_contrato = ctf.codigo_contrato
FROM (custo_total_df as ctf
left join NFe as nfe on ctf.codigo_contrato = nfe.codigo_contrato)
left join contratos as ctt on ctt.codigo_contrato = ctf.codigo_contrato
Alvarovb2009,
Valeu a atenção !
Vou te dar mais detalhes do sistema e o que esta ocorrendo.
NFe : tabela de notas fiscais emitidas (faturamento),
CTF : tabela de pagamentos feitos por contratos (despesas),
CTT : tabela de contratos
Preciso de uma query que me de os pagamentos feitos por contrato(s), e as notas emitidas pelo(s) mesmo(s) contrato(s) no perÃodo selecionado (mês/ano).
Um contrato pode ter (ou não) vários pagamentos e varias notas emitidas no perÃodo selecionado.
Na minha query esta acontecendo o seguinte.
Ao encontrar a primeira ocorrência de uma [Ô]nota fiscal[Ô] no perÃodo selecionado, gera um relatório de mais de duas mil linhas com o mesmo conjunto de dados,
com o [Ô]left join[Ô] também !
Espero que não tenha complicado muito.
Wagner
Valeu a atenção !
Vou te dar mais detalhes do sistema e o que esta ocorrendo.
NFe : tabela de notas fiscais emitidas (faturamento),
CTF : tabela de pagamentos feitos por contratos (despesas),
CTT : tabela de contratos
Preciso de uma query que me de os pagamentos feitos por contrato(s), e as notas emitidas pelo(s) mesmo(s) contrato(s) no perÃodo selecionado (mês/ano).
Um contrato pode ter (ou não) vários pagamentos e varias notas emitidas no perÃodo selecionado.
Na minha query esta acontecendo o seguinte.
Ao encontrar a primeira ocorrência de uma [Ô]nota fiscal[Ô] no perÃodo selecionado, gera um relatório de mais de duas mil linhas com o mesmo conjunto de dados,
com o [Ô]left join[Ô] também !
Espero que não tenha complicado muito.
Wagner
certo, faça o seguinte coloque o comando distinct na frente do código da tabela do faturamento, ficaria assim
select distinct(nfe.codigo_contrato) ........
Acho que isso pode ajudar você, pois ja aconteceu comigo e eu verifiquei que existiam muitas linham duplicadas com os mesmos dados, esse comando evita essa duplicidade
select distinct(nfe.codigo_contrato) ........
Acho que isso pode ajudar você, pois ja aconteceu comigo e eu verifiquei que existiam muitas linham duplicadas com os mesmos dados, esse comando evita essa duplicidade
Estou avaliando e testando sua nova sugestão !
enta assim
gstSQL_Final = [Ô][Ô]
gstSQL_Final = [Ô]SELECT ctt.Titulo, nfe.Numero_NFE, nfe.numero_nfe_substituida, nfe.cidade_serviço, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] nfe.dia_emissao_NFe, nfe.mes_emissao_NFe, nfe.ano_emissao_NFe, nfe.codigo_contrato, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] nfe.dia_recebimento_1_NFe, nfe.mes_recebimento_1_NFe, nfe.ano_recebimento_1_NFe, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] nfe.dia_recebimento_2_NFe, nfe.mes_recebimento_2_NFe, nfe.ano_recebimento_2_NFe, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] nfe.valor_serviço_bruto, nfe.valor_serviço_liquido_1, nfe.valor_serviço_liquido_2, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] ctf.valor_real, ctf.mes_pagamento, ctf.ano_pagamento, ctf.codigo_contrato[Ô]
gstSQL_Final = gstSQL_Final & [Ô] FROM (custo_total_df as ctf INNER JOIN (Nfe INNER JOIN contratos as ctt ON ctt.codigo_contrato = ctf.codigo_contrato)[Ô]
gstSQL_Final = gstSQL_Final & [Ô] ON ctf.codigo_contrato = nfe.codigo_contrato)[Ô]
gstSQL_Final = gstSQL_Final & [Ô] where [Ô] & gstSQL_Where
gstSQL_Final = gstSQL_Final & [Ô] order by [Ô] & gstSQL_order
MsgBox [Ô]string : [Ô] & gstSQL_Final
gstSQL_Final = [Ô][Ô]
gstSQL_Final = [Ô]SELECT ctt.Titulo, nfe.Numero_NFE, nfe.numero_nfe_substituida, nfe.cidade_serviço, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] nfe.dia_emissao_NFe, nfe.mes_emissao_NFe, nfe.ano_emissao_NFe, nfe.codigo_contrato, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] nfe.dia_recebimento_1_NFe, nfe.mes_recebimento_1_NFe, nfe.ano_recebimento_1_NFe, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] nfe.dia_recebimento_2_NFe, nfe.mes_recebimento_2_NFe, nfe.ano_recebimento_2_NFe, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] nfe.valor_serviço_bruto, nfe.valor_serviço_liquido_1, nfe.valor_serviço_liquido_2, [Ô]
gstSQL_Final = gstSQL_Final & [Ô] ctf.valor_real, ctf.mes_pagamento, ctf.ano_pagamento, ctf.codigo_contrato[Ô]
gstSQL_Final = gstSQL_Final & [Ô] FROM (custo_total_df as ctf INNER JOIN (Nfe INNER JOIN contratos as ctt ON ctt.codigo_contrato = ctf.codigo_contrato)[Ô]
gstSQL_Final = gstSQL_Final & [Ô] ON ctf.codigo_contrato = nfe.codigo_contrato)[Ô]
gstSQL_Final = gstSQL_Final & [Ô] where [Ô] & gstSQL_Where
gstSQL_Final = gstSQL_Final & [Ô] order by [Ô] & gstSQL_order
MsgBox [Ô]string : [Ô] & gstSQL_Final
Só poderei voltar aos testes após o natal !
Estamos fechando o ano !
Feliz Natal a todos !
Estamos fechando o ano !
Feliz Natal a todos !
Faça seu login para responder