A clausula JOIN combina registros de duas ou mais tabelas em um banco de dados. O JOIN realiza a combinação de campos de duas tabelas, usando valores comuns a cada tabela. Existem quatro tipo de JOIN: INNER JOIN, OUTER JOIN, LEFT JOIN e RIGHT.
Inner Join
Um INNER JOIN é a operação de associação mais comum e pode ser considerado como o padrão JOIN. INNER JOIN cria uma nova tabela temporária de resultados através da combinação de valores de colunas de duas tabelas (A e B) com base nos PARAMETROS. A consulta compara cada linha de A com cada linha de B para encontrar todos os pares de linhas que satisfazem o JOIN.
Vamos a um exemplo de INNER JOIN.
Digamos que você tenha duas tabelas, tblPedido (IDPedido (PK), IDCliente (FK), Produto) e tblCliente (IDCliente(PK), NomeCliente).
Se fizer um SELECT no tblPedido, em IDCliente ira retornar apenas o código do Cliente. Digamos que você queira que na consulta, alem de retornar os dados de tblPedido, também retorne todos os dados da tabela tblCliente. Para isso você terá que usar o INNER JOIN. Usando INNER JOIN os retornará os seguinte campo:
(IDPedido (PK), IDCliente (FK), Produto, IDCliente(PK), NomeCliente.
Comando
SELECT * FROM tblPedido INNER JOIN tblCliente ON tblCliente.IDCliente = tblCliente.IDCliente
OBS: No INNER JOIN, caso alguma tabela algum campo em branco, o resultado será omitido.
LEFT JOIN
Similar ao INNER JOIN, porém ele trás todos os campos das tabelas A e B, mesmo que a tabela B tenha algum campo vazio.
RIGHT JOIN
Similar ao INNER JOIN, porém ele trás todos os campos das tabelas A e B, mesmo que a tabela A tenha algum campo vazio.
Boa tarde Fabio, estou com um probleminha, tenho três tabelas, A com num de Danfes, B com itens da Danfe e C com Natureza Financeira, já tentei Left, Right e FULL OUTER JOIN, mas apenas me retorna a Danfe com seus respectivos itens que contém a Natureza Financeira. O que desejamos nesta consulta é que retorne as Danfes com os itens e a Natureza Financeira quando tiver, as Danfes que não tiverem a Natureza Financeira trazer a Danfe os Itens e no lugar da Natureza ficar em Branco ou Null.
Chaves: Tabela A (Cabeçalho Danfe) – f1_doc,f1_serie, f1_fornece, f1_loja
Tabela B(Itens Danfe) – d1_doc,d1_serie, d1_fornece, d1_loja
Até aqui beleza, o bicho começa a pegar na próxima.
Tabela C ( Natureza Financeira ) E2_NUM = F1_DOC , E2_PREFIXO = F1_SERIE, E2_FORNECE = F1_FORNECE,E2_LOJA = F1_LOJA.
Obs: Nem todas as Danfes que foram gravadas nas Tabelas A e B foram gravadas na Tabela C.
Desde já agradeço.
Alexandre
Boa tarde Alexandre,
Faça left join com Tabela C.
Se não der certo me envie a estrutura das tabelas para eu recriar aqui e fazer um teste.
Boa tarde, Fabio, tentei sua sugestão mas não tinha dado certo, segue abaixo a estrutura, desde já agradeço pela atenção.
SELECT DISTINCT
D1_TIPO AS TIPO,
F1_DOC AS DANFE,
F1_EMISSAO AS ‘DATA EMISSAO’,
F1_DTDIGIT AS ‘DT LANC SISTEMA’,
F1_FORNECE AS FORNECEDOR,
F1_LOJA AS LOJA,
A2_NOME AS RAZAO,
B1_GRUPO AS ‘GRUPO PROD’,
BM_DESC AS ‘DESC GRUPO’,
D1_COD AS ‘COD PRODUTO’,
B1_DESC AS DESCRICAO,
E2_NATUREZ AS NATUREZA,
ED_DESCRIC AS ‘DESC NATUR’,
DE_CC AS ‘C CUSTO’,
CTT_DESC01 AS ‘DESC C CUSTO’,
DE_PERC AS PERC,
DE_X_VALOR AS ‘VALOR RATEIO’,
F1_VALBRUT AS ‘VALOR DANFE’
FROM SD1010 INNER JOIN SF1010 ON D1_DOC = F1_DOC
AND D1_SERIE = F1_SERIE
AND D1_FORNECE = F1_FORNECE
AND D1_LOJA = F1_LOJA
INNER JOIN SB1010 ON B1_FILIAL = ‘ ‘
AND B1_COD = D1_COD
INNER JOIN SA2010 ON A2_COD = F1_FORNECE
AND A2_LOJA = F1_LOJA
LEFT JOIN SE2010 ON E2_NUM = F1_DOC
AND E2_PREFIXO = F1_SERIE
AND E2_FORNECE = F1_FORNECE
AND E2_LOJA = F1_LOJA
AND (SE2010.D_E_L_E_T_ IS NULL OR SE2010.D_E_L_E_T_ ‘*’)
LEFT JOIN SED010 ON ED_CODIGO = E2_NATUREZ
LEFT JOIN SDE010 ON DE_DOC = F1_DOC
AND DE_SERIE = F1_SERIE
AND DE_FORNECE = F1_FORNECE
AND DE_LOJA = F1_LOJA
AND DE_ITEMNF = D1_ITEM
LEFT JOIN CTT010 ON CTT_CUSTO = DE_CC
LEFT JOIN SBM010 ON BM_GRUPO = B1_GRUPO
WHERE D1_DTDIGIT >= ‘20131201’–RIGHT(Convert(varchar,:DataDe),4)+SUBSTRING(Convert(varchar,:DataDe),3,2)+LEFT(Convert(varchar,:DataDe),2)
AND D1_DTDIGIT <= '20131217'–RIGHT(Convert(varchar,:DataDe),4)+SUBSTRING(Convert(varchar,:DataDe),3,2)+LEFT(Convert(varchar,:DataDe),2)
AND D1_TIPO = 'N'
AND SD1010.D_E_L_E_T_ ‘*’
AND SB1010.D_E_L_E_T_ ‘*’
AND SF1010.D_E_L_E_T_ ‘*’
AND SA2010.D_E_L_E_T_ ‘*’
AND SE2010.D_E_L_E_T_ ‘*’
AND SED010.D_E_L_E_T_ ‘*’
AND SDE010.D_E_L_E_T_ ‘*’
AND CTT010.D_E_L_E_T_ ‘*’
AND SBM010.D_E_L_E_T_ ‘*’
GROUP BY D1_TIPO,F1_DOC,F1_FORNECE,F1_LOJA,A2_NOME, D1_TIPO,D1_COD, B1_DESC, F1_VALBRUT,F1_EMISSAO,F1_DTDIGIT , E2_NATUREZ
,DE_CC, CTT_DESC01,DE_PERC,DE_CUSTO1,ED_DESCRIC, DE_X_VALOR, F1_VALMERC
,B1_GRUPO, BM_DESC
ORDER BY F1_DOC
***********
O relatório é para sair como abaixo ( exportei para . csv )vai ter Danfe que não vai ter na Tabela SF1010 que não vai ter na SF2010 este é para ficar em branco, as que tiverem trazer a natureza
TIPO;DANFE;DATA EMISSAO;DT LANC SISTEMA;FORNECEDOR;LOJA;RAZAO;GRUPO PROD;DESC GRUPO;COD PRODUTO;DESCRICAO;NATUREZA;DESC NATUR;C CUSTO;DESC C CUSTO;PERC;VALOR RATEIO;VALOR DANFE
N;23;20131205;20131216;1892;1;GALLETTINHO COMERCIO E CONSIGNACAO DE CA;31;CAMINHOES E BAU ;300074;LAVAGEM VEICULO (INDEDUTIVEL) ;10.101.06 ;SERVICO DE MANUTENCAO DE FROTA;1108;FIY3757 ;100;30;30
N;38;20131209;20131209;92;1;M.P. DOS SANTOS REPRESENTACOES COM.ME ;31;CAMINHOES E BAU ;300002;COMISSAO ;10.103.09 ;COMISSOES DE REPRESENTANTES ;;;100;5104,38;5104,38
N;39;20131207;20131207;1739;1;REFRIGERACAO DE TRANSPORTE DE MARILIA LT;31;CAMINHOES E BAU ;300000;SERVICOS DE MANUTENCAO CAMINHOES ;;;31101;CLJ0547 ;50;120;240
N;39;20131207;20131207;1739;1;REFRIGERACAO DE TRANSPORTE DE MARILIA LT;31;CAMINHOES E BAU ;300000;SERVICOS DE MANUTENCAO CAMINHOES ;;;31102;CLJ0635 ;50;120;240
N;45;20131207;20131209;1739;1;REFRIGERACAO DE TRANSPORTE DE MARILIA LT;211;MECANICA ;200003;PECAS DE CAMINHAO ;10.100.08 ;COMPRA MAN.FROTA REFRIGERACAO ;31102;CLJ0635 ;100;229,1;374,1
N;45;20131207;20131209;1739;1;REFRIGERACAO DE TRANSPORTE DE MARILIA LT;211;MECANICA ;200080;OLEO ;10.100.08 ;COMPRA MAN.FROTA REFRIGERACAO ;31102;CLJ0635 ;100;10;374,1
N;45;20131207;20131209;1739;1;REFRIGERACAO DE TRANSPORTE DE MARILIA LT;214;COMBUSTIVEIS E LUBRIFICANTES ;200127;GAS 404 REFRIGERACAO ;10.100.08 ;COMPRA MAN.FROTA REFRIGERACAO ;31102;CLJ0635 ;100;90;374,1
N;45;20131207;20131209;1739;1;REFRIGERACAO DE TRANSPORTE DE MARILIA LT;214;COMBUSTIVEIS E LUBRIFICANTES ;200221;NITROGENIO ;10.100.08 ;COMPRA MAN.FROTA REFRIGERACAO ;31102;CLJ0635 ;100;45;374,1
Eu preciso resolver isso
tenho como mim da uma ajuda.
abraços
5. Criar um mecanismo de busca que exiba os dados dos atributos código do
produto, nome do produto, preço unitário do produto, quantidade em estoque e
da entidade produtos e linha de produto da entidade linhas de produtos.
Os dados recuperados deverão ser exibidos agrupados por linha de produto e o
valor monetário em estoque para cada produto;
6. Criar um mecanismo de busca que recupere os atributos nome e sobrenome, o
local de trabalho e os clientes atendidos pelos vendedores da organização.
Os dados recuperados deverão ser agrupados e ordenados em ordem ascendente
por nome do vendedor;
eu tenho todas essas tabelas já feita, só falta o código que estou tentando criar .