INNER JOIN O QUE ESTA ERRADO?
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:
No segundo exemplo, gera erro de sintaxe:
E no último exemplo:
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;
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.
Já tentei de várias maneiras, mas não dá certo.
Você já tentou criar essa consulta pelo Query Designer do Access e depois copiar o SQL que ele gera?
Já tentei, mas nunca traz o resultado que eu quero, algumas vezes não traz nenhum registro.
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;
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?
"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?
vc ja tentou trabalhar com subquery?
ex:
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;
Marcelo, manda ai: andremilare@yahoo.com.br
fiquei curioso..rsrs
fiquei curioso..rsrs
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:
Neste exemplo existem dados de 4 tabelas que são exibidas em uma só pesquisa.
Perceba que por exemplo:
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
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
Hugo:
Fiz assim e deu a seguinte mensagem: "No máximo um registro um registro pode ser retornado nessa subconsulta."
FBURGARDT:
Eu ainda não tentei do seu jeito, mas vou fazer um teste aqui e já te respondo.
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.
Tópico encerrado , respostas não são mais permitidas