INNER JOIN O QUE ESTA ERRADO?

TAMANINI 04/12/2006 17:10:27
#187917
No primeiro exemplo eu fiz e ele me trouxe, muitos registros repitidos, sendo que eu tenho 76 registros da tblDetSec e 30 registros da tblDetTrat que pertence ao registro nº10 da tblHstCiclo:
SELECT
tblsec.det_sec_h, tblsec.det_sec_t1, tblsec.det_sec_t2,
tblsec.det_sec_t3, tblsec.det_sec_t4,
tbltrat.det_trat_h, tbltrat.det_trat_t1, tbltrat.det_trat_t2,
tbltrat.det_trat_t3, tbltrat.det_trat_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, tblDetTrat tbltrat, tblHstCiclo tblhst
WHERE tblhst.hst_id = tblsec.hst_id and
tblhst.hst_id = tbltrat.hst_id and
tblsec.hst_id = tbltrat.hst_id and
tblhst.hst_id = 10;


No segundo exemplo, gera erro de sintaxe:
Citação:

(operador faltando) na expressão de consulta 'tblhst.hst_id = tblsec.hst_id left join tblHstCiclo tblhst on tblhst.hst_id = tbltrat.hst_id'.




SELECT
tblsec.det_sec_h, tblsec.det_sec_t1, tblsec.det_sec_t2,
tblsec.det_sec_t3, tblsec.det_sec_t4,
tbltrat.det_trat_h, tbltrat.det_trat_t1, tbltrat.det_trat_t2,
tbltrat.det_trat_t3, tbltrat.det_trat_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, tblDetTrat tbltrat
left join tblHstCiclo tblhst on tblhst.hst_id = tblsec.hst_id
left join tblHstCiclo tblhst on tblhst.hst_id = tbltrat.hst_id
WHERE
tblhst.hst_id = 10;


E no último exemplo:
Citação:

Erro de sintaxe(operador faltando) na expressão de consulta '(tbltrat.hst_id = tblsec.hst_id) left outer join tblHstCiclo tblhst on (tblhst.hst_id = tblsec.hst_id) left outer join tblHstCiclo tblhst on (tblhst.hst_id = tbltrat.hst_id)'




SELECT
tblsec.det_sec_h, tblsec.det_sec_t1, tblsec.det_sec_t2,
tblsec.det_sec_t3, tblsec.det_sec_t4,
tbltrat.det_trat_h, tbltrat.det_trat_t1, tbltrat.det_trat_t2,
tbltrat.det_trat_t3, tbltrat.det_trat_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
INNER JOIN tblDetTrat tbltrat on (tblsec.det_trat_id = tblsec.hst_id)
left outer join tblHstCiclo tblhst on (tblhst.hst_id = tblsec.hst_id)
left outer join tblHstCiclo tblhst on (tblhst.hst_id = tbltrat.hst_id)
WHERE
tblhst.hst_id = 10;

TAMANINI 06/12/2006 14:09:19
#188340
Não tem jeito mesmo, irei fazer uma consulta para cada tabela, acredito que seja a melhor maneira.
Já tentei de várias maneiras, mas não dá certo.
USUARIO.EXCLUIDOS 06/12/2006 14:16:35
#188342
Você já tentou criar essa consulta pelo Query Designer do Access e depois copiar o SQL que ele gera?
TAMANINI 07/12/2006 08:21:37
#188473
Já tentei, mas nunca traz o resultado que eu quero, algumas vezes não traz nenhum registro.
USUARIO.EXCLUIDOS 07/12/2006 08:33:23
#188477
Tente mais uma vez esse exemplo, mas sem o OUTER:

 


SELECT
tblsec.det_sec_h, tblsec.det_sec_t1, tblsec.det_sec_t2,
tblsec.det_sec_t3, tblsec.det_sec_t4,
tbltrat.det_trat_h, tbltrat.det_trat_t1, tbltrat.det_trat_t2,
tbltrat.det_trat_t3, tbltrat.det_trat_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
INNER JOIN tblDetTrat tbltrat on (tblsec.det_trat_id = tblsec.hst_id)
left join tblHstCiclo tblhst on (tblhst.hst_id = tblsec.hst_id)
left join tblHstCiclo tblhst on (tblhst.hst_id = tbltrat.hst_id)
WHERE
tblhst.hst_id = 10;


TAMANINI 07/12/2006 13:50:32
#188583
Não deu certo tb:
"Erro de sintaxe(operador faltando): '(tblsec.det_trat_id = tblsec.hst_id)
left join tblHstCiclo tblhst on (tblhst.hst_id = tblsec.hst_id)
left join tblHstCiclo tblhst on (tblhst.hst_id = tbltrat.hst_id)'"

Será que o problema estaria pelo fato de eu ter acrescentado mais duas tabelas que estão relacionando com tblHstCiclo tb?
Caso queira posso enviar o BD para vc dar uma olhada, pode ser?
HUGOSSOUZA 07/12/2006 15:50:11
#188611
vc ja tentou trabalhar com subquery?
ex:

select tb1.campo1,
(select campo2 from tabela2 where id = tb1.id) as Campo2,
(select campo3 from tabela3 where id = tb1.id) as Campo3,
(select campo4 from tabela4 where id = tb1.id) as Campo4
from Tabela1 tb1 where id = 10;




USUARIO.EXCLUIDOS 07/12/2006 15:57:54
#188617
Marcelo, manda ai: andremilare@yahoo.com.br

fiquei curioso..rsrs
USUARIO.EXCLUIDOS 07/12/2006 16:14:11
#188626
Hi... eu já tive o mesmo problema... MAS! Isso que vc tá querendo é perfeitamente possível. Eu uso esse tipo de consulta no meu DB.

Acho que foi a coisa mais trabalhosa que tive até hj... hehe.

Bom, no meu caso, essa mensagem tava dando pq eu tinha definido a chave primária com o mesmo nome da chave estrangeira.

No seu caso, HST_ID é a chave primária e HST_ID tb é a chave estrangeira. Assim sempre dava erro. Sempre sempre sempre sempre.
Mas aí eu renomeei as chaves estrangeiras para nomes diferentes, por exemplo:

Chave primária: HST_ID
Chave estrangeira: HST_IDa
Chave estrangeira: HST_IDb
e assim por diante...

Fora isso, o resto foi fácil... Vc faz o SELECT como vc fez mesmo, e o JOIN é da seguinte maneira:

select grupo,material,nf,fornec,qtdesai,os from ((((tblgrupo inner join tblmaterial on tblgrupo.idgrp=tblmaterial.idgrupo) inner join tblentrada on tblentrada.idmaterial=tblmaterial.idmtrl) inner join tblfornec on tblfornec.idfrnc=tblentrada.idfornec) inner join tblsaida on tblsaida.idmaterial=tblmaterial.idmtrl) inner join tblos on tblos.idos = tblsaida.idossai


Neste exemplo existem dados de 4 tabelas que são exibidas em uma só pesquisa.

Perceba que por exemplo:

tblentrada.idmaterial=tblmaterial.idmtrl

idmtrl é a chave primária e idmaterial é a chave estrangeira.

Enquanto eu não diferenciei os nomes das chaves, acontecia o mesmo erro que está acontecendo com vc.

Me disseram que no ACCESS é assim mesmo quando vc coloca nomes iguais para chaves estrangeiras / primárias que se relacionam... Pelo menos eu senti na pele...

Qq coisa posta aí de novo pra ver se resolveu.

[ ] ÂÂÂ's
TAMANINI 07/12/2006 17:41:23
#188650
Hugo:
Fiz assim e deu a seguinte mensagem: "No máximo um registro um registro pode ser retornado nessa subconsulta."

SELECT tblhst.hst_nl,  tblhst.hst_desc, 
(SELECT tblsec.det_sec_t1 FROM tblDetSec tblsec WHERE tblsec.hst_id = tblhst.hst_id),
(SELECT tbltrat.det_trat_t1 FROM tblDetTrat tbltrat WHERE tbltrat.hst_id = tblhst.hst_id)
from tblHstCiclo tblhst
WHERE hst_id=10;


FBURGARDT:
Eu ainda não tentei do seu jeito, mas vou fazer um teste aqui e já te respondo.

Página 2 de 3 [27 registro(s)]
Tópico encerrado , respostas não são mais permitidas