Inner Join e SQL Explorer

27/05/2008

2

Estou tentando escrever uma sql :

SELECT c.data, c.hora, c.carro, pc.peca, pc.qtde, pc.Ident, c.cor, c.datasaida, c.horasaida, pc.voltagem, c.tipocarga ,cm.camada
FROM bkp_carros as c

inner join
bkp_pecacarro pc
on pc.carro = c.carro
and pc.data = c.data
and pc.hora = c.hora

inner Join bkp_camadas cm
on cm.carro = c.carro
and cm.peca = pc.peca
and cm.data = pc.data
and cm.hora = pc.hora
and cm.onde = ´E´

WHERE c.data >= #05/26/2008
and c.data <= 05/26/2008
and (c.carro between 1 and 9999)

estou 1º testando no sqlexlporer para dpois transferi-lo para o programa.
É uma base de dados Access. e o erro que gera é este.

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression ´´


Responder

Posts

27/05/2008

Paulo

Vê se funciona assim:
SELECT c.data, c.hora, c.carro, pc.peca, pc.qtde, pc.Ident, c.cor, c.datasaida, c.horasaida, pc.voltagem, c.tipocarga ,cm.camada FROM bkp_carros c inner join bkp_pecacarro pc on pc.carro = c.carro and pc.data = c.data and pc.hora = c.hora inner Join bkp_camadas cm on cm.carro = c.carro and cm.peca = pc.peca and cm.data = pc.data and cm.hora = pc.hora WHERE c.data >= #05/26/2008 and c.data <= 05/26/2008 and (c.carro between 1 and 9999) and cm.onde = ´E´



Responder

27/05/2008

Pedroso

Amigo..... vc retornou minha pergunta como resposta ..... vc queria escrever algo e se confundiu?


Responder

27/05/2008

Paulo

Leia a sua e leia a minha e ve se são iguais.


Responder
essa sua instrução funciona no access ?


Responder

27/05/2008

Pedroso

Pô desculpa ae Paulo e obrigado. na real tava faltando café , rsrs......
é a instrução [b:57e77087b6]and cm.onde = ´E´ [/b:57e77087b6] que tu colocaste no clausula where ......

So que me gerou o seguinte erro :

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression


Estou usando o SQL Exlporer .... com o driver microsoft access driver (Eu acho!!!)


e [b:57e77087b6]emerson.en[/b:57e77087b6] so funciona qdo ultilizo apenas um join .... quando uso 2 join´s da esse erro. Vi num topico anterior que tu tava pasando por um problema parecido com 3 join´s...... e acho q é problema no BDE ..... como uso ACCESS com ADO..... vou experimentar refazer o select diretamente no componente. Retorno se houver sucesso.


Responder

27/05/2008

Brunodsr

Vc ja tentou separar as tabelas por vírgula ao invés de usar join??

Tipo:
Select * from a,b
where a.id = b.id

Atenciosamente,

Bruno Rocha


Responder

27/05/2008

Pedroso

Mas é assim q elas são hj...... mas estou qrendo aumentar a velocidade da minha pesquisa. Hoje ela é assim:

SELECT c.data, c.hora, c.carro, pc.peca, pc.qtde, pc.Ident, c.cor, c.datasaida,
c.horasaida, pc.voltagem, c.tipocarga,

(select min( cm.camada ) from camadas cm
where cm.carro = c.carro
and cm.peca = pc.peca
and cm.data = pc.data
and cm.hora = pc.hora
and cm.onde = ´E´) as EcoatMin,

(select max( cm.camada )
from camadas cm
where cm.carro = c.carro
and cm.peca = pc.peca
and cm.data = pc.data
and cm.hora = pc.hora
and cm.onde = ´E´) as EcoatMax,

(select min( cm.camada )
from camadas cm
where cm.carro = c.carro
and cm.peca = pc.peca
and cm.data = pc.data
and cm.hora = pc.hora
and cm.onde = ´A´) as AbastMin,

(select max( cm.camada )
from camadas cm
where cm.carro = c.carro
and cm.peca = pc.peca
and cm.data = pc.data
and cm.hora = pc.hora
and cm.onde = ´A´) as AbastMax,

(select p.nome
from pintores p
where p.pintor=c.inspetorA) as InspetorA,

(select p.nome
from pintores p
where p.pintor=c.inspetorE) as InspetorE, TotalPausaHrs

FROM carros as c, pecacarro as pc
WHERE c.data >= #05/26/2008
and c.data <= 05/26/2008
and c.carro = pc.carro
and c.data = pc.data
and c.hora = pc.hora
and ( c.carro >= 1 and c.carro <= 9999 )
order by c.carro

Union

SELECT c.data, c.hora, c.carro, pc.peca, pc.qtde,pc.Ident, c.cor, c.datasaida,
c.horasaida, pc.voltagem, c.tipocarga,
(select min( cm.camada )
from bkp_camadas cm
where cm.carro = c.carro
and cm.peca = pc.peca
and cm.data = pc.data
and cm.hora = pc.hora
and cm.onde = ´E´) as EcoatMin,

(select max( cm.camada )
from bkp_camadas cm
where cm.carro = c.carro
and cm.peca = pc.peca
and cm.data = pc.data
and cm.hora = pc.hora
and cm.onde = ´E´) as EcoatMax,

(select min( cm.camada )
from bkp_camadas cm
where cm.carro = c.carro
and cm.peca = pc.peca
and cm.data = pc.data
and cm.hora = pc.hora
and cm.onde = ´A´) as AbastMin,

(select max( cm.camada )
from bkp_camadas cm
where cm.carro = c.carro
and cm.peca = pc.peca
and cm.data = pc.data
and cm.hora = pc.hora
and cm.onde = ´A´) as AbastMax,

(select p.nome
from pintores p
where p.pintor=c.inspetorA) as InspetorA,

(select p.nome
from pintores p
where p.pintor=c.inspetorE) as InspetorE, TotalPausaHrs


FROM bkp_carros c,bkp_pecacarro as pc
WHERE c.data >= #05/26/2008

and c.data <= #05/26/2008
and c.carro = pc.carro
and c.data = pc.data
and c.hora = pc.hora
and ( c.carro >= 1 and c.carro <= 9999 ) order by c.carro

E estou qrendo aprimorá-la.


Responder

27/05/2008

Paulo

Bem, duas coisas:
1) Não deixe de usar JOIN. Os JOIN, LEFT, RIGTH, são a forma mas legal e mais corretas de se trabalhar com SQL. O Uso de ´,´, era uma forma usada por algumas versões do Oracle(Dizem que não suportava JOIN, tipo 8i) e muitos colegas continuaram usando dessa forma. Mas a forma correta de se escrever query, é usando JOIN, LEFT e etc... Então se habitue a trabalhar assim, pois terá entrada em qualquer lugar.

2)No post original vc disse que estava dando um erro de Sintaxe e vi que havia um ´as´ para o Alias da tabela e eu reescrevi seu post sem esse ´as´.
Agora quanto a performance, isso depende de muitas coisas. Ex: Vc tem UNION e várias subquerys, que ainda não testei, mas podem ser minimizadas, ou seja, talvez não seja necessário tantas subquery. Quanto mais se usa SubQuery e Union, a tendência é perder performance. Claro que tem situações em que eles são indispesáveis, mas onde puder não usá-los, faça isso(onde puder).


Responder

27/05/2008

Pedroso

Concordo contigo. A ultilização destes metodos de pesquisa auxiliam e muito na performance da pesquisa. O problema é q estou usando Access com ADO. E isto é que esta gerando esses problemas todos. Em firebird, SQL Server, DB2 ou ate mesmo Oracle , já teria resolvido o problema ...... mas esta em Access e ñ tenho como mudar o banco de dados. Alguem tem mais uma dica?


Responder

29/05/2008

Pedroso

Alguem gostaria de postar algo a respeito? Paulo tem mais alguma ideia?


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira