INNER JOIN O QUE ESTA ERRADO?

TAMANINI 08/12/2006 09:41:05
#188765
FBURGARDT:
Fiz um select semelhante ao seu, desta vez não gerou erro, mas não trouxe nenhum registro:
SELECT 
tblDetSec.det_sec_h, tblDetSec.det_sec_t1, tblDetSec.det_sec_t2,
tblDetSec.det_sec_t3, tblDetSec.det_sec_t4,
tblDetTrat.det_trat_h, tblDetTrat.det_trat_t1, tblDetTrat.det_trat_t2,
tblDetTrat.det_trat_t3, tblDetTrat.det_trat_t4,
tblHstCli.hst_cli_nome,
tblHstProd.hst_prod_nome, tblHstProd.hst_prod_vol, tblHstProd.hst_prod_uni,
tblHstCiclo.hst_ncrt, tblHstCiclo.hst_nl, tblHstCiclo.hst_bstmp, tblHstCiclo.hst_nlt,
tblHstCiclo.hst_ntrat, tblHstCiclo.hst_desc, tblHstCiclo.hst_inicic, tblHstCiclo.hst_fimcic,
tblHstCiclo.hst_initrat, tblHstCiclo.hst_dttrat, tblHstCiclo.hst_sensor,
tblHstCiclo.hst_tc, tblHstCiclo.hst_tt, tblHstCiclo.hst_tmpt, tblHstCiclo.hst_resp,
tblHstCiclo.hst_op, tblHstCiclo.hst_run
FROM (((tblHstCiclo inner join tblDetSec on tblHstCiclo.hst_id=tblDetSec.hst_idA)
INNER JOIN tblDetTrat on tblDetTrat.hst_idB=tblHstCiclo.hst_id)
INNER JOIN tblHstCli on tblHstCli.hst_idC=tblHstCiclo.hst_id)
INNER JOIN tblHstProd on tblHstProd.hst_cli_id=tblHstCli.hst_cli_id;


Acredito que no meu caso, mesmo os nomes da chave primária e estrangeira estarem iguais, esse não seria o problema, pois a chave estrangeira eu não coloco a chave do access.
Eu até fiz um teste para trazer dados de apenas duas tabelas com JOIN e funcionou:
SELECT 
tblsec.det_sec_h, tblsec.det_sec_t1, tblsec.det_sec_t2,
tblsec.det_sec_t3, tblsec.det_sec_t4,
tblhst.hst_ncrt, tblhst.hst_nl, tblhst.hst_bstmp, tblhst.hst_nlt,
tblhst.hst_ntrat, tblhst.hst_desc, tblhst.hst_inicic, tblhst.hst_fimcic,
tblhst.hst_initrat, tblhst.hst_dttrat, tblhst.hst_sensor,
tblhst.hst_tc, tblhst.hst_tt, tblhst.hst_tmpt, tblhst.hst_resp,
tblhst.hst_op, tblhst.hst_run
FROM tblDetSec tblsec
left outer join tblHstCiclo tblhst on (tblhst.hst_id = tblsec.hst_id)
WHERE
tblhst.hst_id = 10;

USUARIO.EXCLUIDOS 08/12/2006 11:00:31
#188789
é estranho não retornar nenhum dado....

Não entendi quando vc diz que não coloca a chave do ACCESS.

Se vc puder me mandar o DB, eu dou uma olhada...

[ ]ÂÂÂ's

USUARIO.EXCLUIDOS 08/12/2006 11:32:25
#188796
Carinha, super esquisito, fiz uma query básica:

 

SELECT

C.*, T.*, S.*

FROM tblHstCiclo C
INNER JOIN tblDetTrat T
ON (T.hst_id = C.hst_id)

INNER JOIN tblDetSec S
ON (S.hst_id = C.hst_id)


WHERE C.hst_id = 10;



Com apenas um INNER JOIN, funciona perfeitamente, mas se coloco o segundo, dá erro de sintaxe. Estou usando Office 2003 com Access 2000 File Format. Importei para MySQL e rodou perfeitamente! Não sei como posso te ajudar nessa, realmente um mistério!
TAMANINI 08/12/2006 11:36:06
#188800
ok, acabei de enviar para o seu e-mail do terra.
HUGOSSOUZA 08/12/2006 11:42:11
#188805
manda o BD pro meu email: hugo.santiago@tedablio.com.br
HUGOSSOUZA 08/12/2006 14:14:46
#188845
cara... pelo que eu vi é assim:

ex:
tabela1 - 1 registro
tabela2 - 60 registros
tabela3 - 30 registros

então... pra cada registro da tabela1 ele vai voltar 60 registros da tabela2 + 30 registros da tabela3.
pra cada registro da tabela2 ele vai voltar 30 registros
por isso volta aquele monte de registros.

e no access eu nunca consegui usar mais de 1 join....
TAMANINI 08/12/2006 15:53:20
#188873
Certo, o jeito vai ser eu fazer uma consulta para cada tabela por enquanto e futuramente quando eu colocar um BD decente, eu utilizo o JOIN.
Mas me digam uma coisa, esse meu relacionamento entre as tabelas tblHstCiclo, tblHstProd e tblHstCli está certo? No meu caso eu vou ter 1 histórico com muitos clientes e produtos, assim como terei produtos com o mesmo nome entre clientes do mesmo histórico, alterando apenas o volume.
Página 3 de 3 [27 registro(s)]
Tópico encerrado , respostas não são mais permitidas