Dúvida SQL - Inner Join

3 respostas
Igor_Novaes

Olá todos.

Gostaria de uma ajuda em SQL para um sistema que estou desenvolvendo de controle de estoque.

Tenho 3 tabelas: MOVIMENTO - CADCLIENTE - CADFORNECEDOR
Somente estão relacionadas as tabelas CADCLIENTE e MOVIMENTO através do CODCLIENTE.

Estou tentando fazer a listagem dos movimentos de entrada e saída dos CLIENTES e FORNECEDORES respectivamente no seguinte formato:

CODMOV | DATAMOV | NOMECLIENTE | NOMEFORNECEDOR

O código do meu SQL é este:

SELECT MOVIMENTO.codmov, MOVIMENTO.datamov, CADCLIENTE.nomecliente, CADFORNECEDOR.razaofornecedor
FROM (MOVIMENTO INNER JOIN CADFORNECEDOR ON MOVIMENTO.codfornecedor= CADFORNECEDOR.codfornecedor)
INNER JOIN CADCLIENTE ON MOVIMENTO.codcliente= CADCLIENTE.codcliente

O problema é que não lista nada, mesmo tendo dois movimentos registrados na tabela MOVIMENTO.

Eu preciso ter as tabelas todas relacionadas? É possível fazer um Inner Join com tabelas não relacionadas?

Me ajudem por favor!!!
Muito obrigado

3 Respostas

J

Cara, não sei se é bem isso que vc quer, mas se eu fosse fazer esse select faria da seguinte forma:

SELECT MOV.codmov,
MOV.datamov,
CLI.nomecliente,
FOR.razaofornecedor
FROM MOVIMENTO MOV,
CADFORNECEDOR FOR,
CADCLIENTE CLI
WHERE FOR.codfornecedor = MOV.codfornecedor
AND CLI.codcliente = MOV.codcliente

essa consulta ficaria melhor se vc fornecer um cliente ou fornecedor, adicionando mais uma cláusula no WHERE.
exemplo: AND CLI.codcliente = 123

Marck

Bom dia.

Verifica se algum dos inner joins não estão falhando. Tira um deles para ter certeza ou usa left join.

Use alias nas querys para simplificar e ficar mais limpo o código:

SELECT a.codmov, a.datamov, b.razaofornecedor, c.nomecliente FROM MOVIMENTO a INNER JOIN CADFORNECEDOR b ON (a.codfornecedor = b.codfornecedor) INNER JOIN CADCLIENTE c ON (a.codcliente = c.codcliente)

Marck

A

Legal.

Criado 28 de agosto de 2007
Ultima resposta 27 de jun. de 2011
Respostas 3
Participantes 4