CLAUSULA INNER JOIN

ICEMAN 10/08/2007 22:36:00
#230453
Boa noite

bem nao sei como explicar muito bem mais vamos lá

tenhu de criar um select na minha tabela

só que assim tenhu um valor onde ele me informa o numero do pedido

ai tem os produtos do pedido, e cada produto tem uma ficha de itens.

bem preciso pegar todos os produtos da tabela pedido e os itens vao pegar os itens e gerar a sql

só que o problema nao consiste em gerar só a sql

o problema persiste em entender a clausula INNER JOIN.

Alguem sabe explicar a teoria ea vase dessa clausula?


obrigado desde já.
USUARIO.EXCLUIDOS 11/08/2007 03:46:05
#230465
Resposta escolhida
Cara, pelo que entendi, vc tem três tabelas PEDIDOS, PRODUTOS e ITENS (não sei os nomes), onde 1 pedido tem N produtos e 1 produto tem N itens, certo?

Se sim, então acho que não seria o INNER JOIN que você deveria usar, pois o INNER JOIN deve ser usado quando o número de registros que vc quer de uma tabela seja igual ao da segunda, nesse caso acho que seria melhor pegar os itens separadamente (três SELECTs)...

Talvez eu tenha entendido mal...

Um exemplo onde vc usaria o INNER JOIN seria para pegar o cliente de determinado pedido, exemplo, pegar os dados pedido de numero 10:

SELECT A.NUM_PEDIDO, A.VAL_TOTAL, A.DATA, B.COD_CLIENTE, B.NOME_CLIENTE
FROM PEDIDO A INNER JOIN CLIENTE B ON A.COD_CLIENTE = B.COD_CLIENTE
WHERE A.NUM_PEDIDO = 10


Explicando:
SELECT A.NUM_PEDIDO, A.VAL_TOTAL, A.DATA, B.COD_CLIENTE, B.NOME_CLIENTE
Pega os registros, onde A.* é pra a tabela PEDIDO e B.* é para a tabela CLIENTE

FROM PEDIDO A INNER JOIN CLIENTE B ON A.COD_CLIENTE = B.COD_CLIENTE
Aqui você mostra quais tabelas estão relacionadas, e após o ON vc coloca com quais campos estão ligadas, este A e B após PEDIDO e CLIENTE, significa um tipo de apelido para a tabela, assim não precisa por no SELECT:
SELECT PEDIDO.NUM_PEDIDO, PEDIDO.VAL_TOTAL, PEDIDO.DATA, CLIENTE.COD_CLIENTE...
pode abreviar...

WHERE A.NUM_PEDIDO = 10
Pega os registro cujo NUM_PEDIDO da tabela A (PEDIDO) seja igual a 10...

Outra forma de fazer é deixar tudo no WHERE:
SELECT A.NUM_PEDIDO, A.VAL_TOTAL, A.DATA, B.COD_CLIENTE, B.NOME_CLIENTE
FROM PEDIDO A, CLIENTE B
WHERE A.COD_CLIENTE = B.COD_CLIENTE AND
A.NUM_PEDIDO = 10



é isso, qualquer dúvida poste...flw
ICEMAN 11/08/2007 19:45:54
#230521
Desculpe matioli eu tenhu sim ambas as tabelas só que eu quero fazer pra rodar no vrx

nessa sua segunda forma roda no vrx?


grato pela atenção
ICEMAN 11/08/2007 23:08:08
#230529
fiz um view pelo firebird assim:

CREATE VIEW PEDIDOS(
N_PED,
DATA,
ENTREGA,
COD_PROD,
PROD,
QTD_PRODS,
PRECO,
COR,
TAMANHO,
ITEN,
QTD_ITEM,
COM,
ALT,
ESP,
ENCABECAMENTO)
AS
select pedido.n_ped, pedido.data, pedido.entregar, i_ped.cod_prod, i_ped.prod, i_ped.qtd,
i_ped.valor, i_ped.cor, I_ped.tamanho, i_prods.item, i_prods.qtd, i_prods.com,
i_prods.com, i_prods.esp, i_prods.encabecamento
from i_prods inner join (pedido inner join i_ped on i_ped.n_ped=pedido.n_ped) on i_prods.n_prod=i_ped.cod_prod
;


Fiz dojeito que oweber me ensinou e funcionou agora aqui pelo vb eu gero uma sql assim

dim qual_pedido as string

qual_pedido=txtNPed

rs_qpedido.open "select * from Pedidos where n_ped='" & qual_pedido &"'"

Tópico encerrado , respostas não são mais permitidas