nao uso muitos joins porem nessa consulta eh extremamente necessario… porem esta acusando erro de sintaxe… alguem consegue identificar algum erro no trecho ai em baixo?
obs: é sql sim
a query completa esta aqui
SELECT clientes.nome, clientes.endereco, clientes.bairro, cidades.Nome_da_cidade AS Cidade, clientes.fone, clientes.celular, MAX(Pedidos.Data_do_pedido) AS UltimoPedido, MAX(Pedidos.Valor_total) AS ValorUltimoPedido, Clientes.Numero, Clientes.Complemento
from temp, cidades INNER JOIN clientes ON ( cidades.codigo_da_cidade = clientes.codigo_da_cidade) LEFT JOIN pedidos ON (Pedidos.codigo_do_cliente = clientes.codigo_do_cliente)
WHERE clientes.codigo_da_cidade = temp.filtra_por_cidade
GROUP BY clientes.nome, clientes.endereco, clientes.bairro, cidades.Nome_da_cidade, clientes.fone, clientes.celular, Clientes.Numero, Clientes.Complemento
ORDER BY cidades.Nome_da_cidade, clientes.bairro;
from temp, cidades INNER JOIN clientes ON ( cidades.codigo_da_cidade = clientes.codigo_da_cidade) LEFT JOIN pedidos ON (Pedidos.codigo_do_cliente = clientes.codigo_do_cliente)
resumindo o que quero fazer… :
fazer uma lista dos clientes da cidade que eu mando no temp… e se existir pedido para aquele cliente… trazer o valor do ultimo pedido e a data
Um erra acho que é depois do FROM. Você deve colocar uma unica tabela e colocou duas (temp e cidades)
E outro pode ser os parenteses, não tenho certeza, mas acho que eles não devem ser usados.
Considerando que tu não colou o select, a pergunta faz sentido: tá tentando fazer isso em HQL? Parece SQL, mas numa dessas…
Confere teus alias, também.
Que “temp” eh aquela?
Tua pergunta e a explicação não estão muito boas… especifica mais, cara.
Abraço!
fazer uma lista dos clientes da cidade que eu mando no temp… e se existir pedido para aquele cliente… trazer o valor do ultimo pedido e a data
É mais ou menos assim…
SELECT clientes.nome, clientes.endereco, clientes.bairro, cidades.Nome_da_cidade AS Cidade, clientes.fone, clientes.celular, Pedidos.Data_do_pedido as ultimo , Pedidos.Valor_total AS ValorUltimoPedido, Clientes.Numero, Clientes.Complemento
from temp, cidades INNER JOIN clientes ON ( cidades.codigo_da_cidade = clientes.codigo_da_cidade)
LEFT JOIN pedidos ON (Pedidos.codigo_do_cliente = clientes.codigo_do_cliente)
where Pedidos.Data_do_pedido = (select MAX(Pedidos.Data_do_pedido) AS UltimoPedido where Pedidos.codigo_do_cliente = clientes.codigo_do_cliente and clientes.codigo_da_cidade = temp.filtra_por_cidade)
and Pedidos.Valor_total = (select MAX(Pedidos.Valor_total) AS ValorUltimoPedido Pedidos.codigo_do_cliente = clientes.codigo_do_cliente and clientes.codigo_da_cidade = temp.filtra_por_cidade)
and clientes.codigo_da_cidade = temp.filtra_por_cidade
cara eu estava pesquisando como usar os joins…e entendi mais ou menos como funciona porem esta acusando um erro ainda … dizendo ‘sem suporte a expressao de associacao’ … mas acredito que seja da ferramenta que estou usando… no caso para este projeto é access… veja a sql abaixo e me diga se encontra algo de errado… acredito q agora esta mais clara pra vcs…
SELECT
clientes.nome,
clientes.endereco,
clientes.bairro ,
cidades.nome_da_cidade AS Cidade,
clientes.fone,
clientes.celular,
MAX(Pedidos.Data_do_pedido) AS UltimoPedido,
MAX(Pedidos.Valor_total) AS ValorUltimoPedido,
Clientes.Numero,
Clientes.Complemento
FROM
cidades INNER JOIN clientes ON cidades.codigo_da_cidade = clientes.codigo_da_cidade ,
clientes LEFT JOIN pedidos ON Pedidos.codigo_do_cliente = clientes.codigo_do_cliente ,
temp
WHERE clientes.codigo_da_cidade = temp.filtra_por_cidade
GROUP BY clientes.nome, clientes.endereco, clientes.bairro, cidades.Nome_da_cidade, clientes.fone, clientes.celular, Clientes.Numero, Clientes.Complemento
ORDER BY cidades.Nome_da_cidade, clientes.bairro;
Hum é que a sintaxe do join não esta correta, muda isso e veja o que da
Depois do from você coloca sua tabela principal, aquela que você quer buscar. Para adicionar um join você coloca assim:
Ex:
select *
from produto
inner join categoria on (produto.idCategoria = categoria.idCategoria)
Quanto ao qual tipo de join usar, isso depente, pode ser inner, left e right
tava pesquisando mais um pouco aqui… e cheguei a solucao
SELECT
clientes.nome,
clientes.endereco,
clientes.bairro ,
cidades.nome_da_cidade AS Cidade,
clientes.fone,
clientes.celular,
MAX(Pedidos.Data_do_pedido) AS UltimoPedido,
MAX(Pedidos.Valor_total) AS ValorUltimoPedido,
Clientes.Numero,
Clientes.Complemento
FROM (cidades INNER JOIN clientes ON cidades.codigo_da_cidade = clientes.codigo_da_cidade) LEFT JOIN pedidos ON pedidos.codigo_do_cliente = clientes.codigo_do_cliente
where
clientes.codigo_da_cidade = ( select temp.filtra_por_cidade from temp )
GROUP BY clientes.nome, clientes.endereco, clientes.bairro, cidades.Nome_da_cidade, clientes.fone, clientes.celular, Clientes.Numero, Clientes.Complemento
ORDER BY cidades.Nome_da_cidade, clientes.bairro;
usei uma sub consulta para retornar o filtro de temp no where… pois nao estava me permitindo colocar a tabela temp no from
obs… temp eh uma tabela usada para guardar informacoes temporarias para relatorio ou algo do genero
SELECT
clientes.nome,
clientes.endereco,
clientes.bairro ,
cidades.nome_da_cidade AS Cidade,
clientes.fone,
clientes.celular,
MAX(Pedidos.Data_do_pedido) AS UltimoPedido,
MAX(Pedidos.Valor_total) AS ValorUltimoPedido,
Clientes.Numero,
Clientes.Complemento
FROM
((temp INNER JOIN cidades ON cidades.codigo_da_cidade = temp.filtra_por_cidade) INNER JOIN clientes ON cidades.codigo_da_cidade = clientes.codigo_da_cidade) LEFT JOIN pedidos ON pedidos.codigo_do_cliente = clientes.codigo_do_cliente
GROUP BY clientes.nome, clientes.endereco, clientes.bairro, cidades.Nome_da_cidade, clientes.fone, clientes.celular, Clientes.Numero, Clientes.Complemento
ORDER BY cidades.Nome_da_cidade, clientes.bairro;
from temp
INNER JOIN cidades ON (cidades.codigo_da_cidade = temp.filtra_por_cidade)
INNER JOIN clientes ON (clientes.codigo_da_cidade = cidades.codigo_da_cidade)
LEFT JOIN pedidos ON (pedidos.codigo_do_cliente = clientes.codigo_do_cliente)
from temp
INNER JOIN cidades ON (cidades.codigo_da_cidade = temp.filtra_por_cidade)
INNER JOIN clientes ON (clientes.codigo_da_cidade = cidades.codigo_da_cidade)
LEFT JOIN pedidos ON (pedidos.codigo_do_cliente = clientes.codigo_do_cliente)[/quote]
porem desta forma nao funciona … acusa falta de operador… na query q eu postei antes… os parenteses que juntam os dois inner joins para usar como result set do left join… nao é isso?