SQL mais uma ajuda por favor

Sim existem um total de 240 encontros (8 jogos * 30 jornadas) para cada competição(desde que a competição tenha 16 clubes inscritos e seja um campeonato claro)


Vou testar
 
Sim existem um total de 240 encontros (8 jogos * 30 jornadas) para cada competição(desde que a competição tenha 16 clubes inscritos e seja um campeonato claro)


Vou testar

Pronto, da maneira que se estava a fazer, não se estava a especificar nenhum encontro, logo não dava para fazer join.
 
Diz a mesma coisa

Tentou executar uma consulta que não inclui a expressão especificada ID como parte de uma função de agregação
 
Vamos lá ver... tu queres que informação exactamente? Por encontro mas para todos os encontros de determinada competição?
 
Testa aqui este sff.

SELECT [E].ID, [E].ID_COMPETICAO, [E].JORNADA, EQUIPA1.EQUIPA AS VISITADO, EQUIPA2.EQUIPA AS VISITANTE, [E].DATA_HORA, COUNT(GOLOS_EQUIPA1.ID) as GOLOS_VISITADO, COUNT(GOLOS_EQUIPA2.ID) as GOLOS_VISITANTE



FROM (ENCONTROS AS E INNER JOIN EQUIPAS AS EQUIPA1 ON [E].VISITADO=EQUIPA1.ID)
INNER JOIN EQUIPAS AS EQUIPA2 ON [E].VISITANTE=EQUIPA2.ID
INNER JOIN (SELECT * FROM GOLOS) as GOLOS_EQUIPA1 ON (
GOLOS_EQUIPA1.EQUIPA = E.VISITADO AND GOLOS_EQUIPA1.ID_ENCONTRO = [E].ID)
INNER JOIN (SELECT * FROM GOLOS) as
GOLOS_EQUIPA2 ON (GOLOS_EQUIPA2.EQUIPA = E.VISITANTE AND GOLOS_EQUIPA2.ID_ENCONTRO = [E].ID)

WHERE [E].ID_COMPETICAO=13
GROUPBY [E].ID
ORDER BY [E].ID;


Nota que só vão aparecer linhas onde há golos. Se meteres left join em vez do primeiro inner join já devem aparecer todos os encontros.
 
Última edição:
encontros
id
id_competicao
jornada
visitado
visitante
data

golos
id
id_encontro
equipa
forma
minuto


No programa que estou a desenvolver, na janela principal a primeira coisa a fazer é: Difinir em que Época e que Competição vamos trabalhar.

Exemplo 2012/2013 Primeira Liga (Este conjunto de informação da-me um id, neste caso é 13)

Com esta informação eu no meu programa vou querer mostrar um calendário com todos os jogos de todas as jornadas da Época 2012/2013 Primeira Liga ou seja:

Select * from Encontros
Where ID_Competicao = 13

Mas depois aconteceu que precisei de transformar os Ids das equipas no nome da equipa em si, então vi na net e a maneira correcta pareceu-me ser a do left join.

A seguir lembrei-me que no calendário antes da prova iniciar não são apresentados os resultados mas à medida que o campeonato vai decorrendo é necessário saber o resultado dos jogos... e pronto aqui estamos nós em volta disto
 
Operador em falta neste join

INNER JOIN (SELECT * FROM GOLOS) as GOLOS_EQUIPA2 ON (GOLOS_EQUIPA2.EQUIPA = E.VISITANTE AND GOLOS_EQUIPA2.ID_ENCONTRO = [E].ID)
 
Operador em falta neste join

INNER JOIN (SELECT * FROM GOLOS) as GOLOS_EQUIPA2 ON (GOLOS_EQUIPA2.EQUIPA = E.VISITANTE AND GOLOS_EQUIPA2.ID_ENCONTRO = [E].ID)

Pensando melhor não dá para fazer inner join com as duas tabelas GOLOS:

SELECT [E].ID, [E].ID_COMPETICAO, [E].JORNADA, EQUIPA1.EQUIPA AS VISITADO, EQUIPA2.EQUIPA AS VISITANTE, [E].DATA_HORA, COUNT(GOLOS_EQUIPA1.ID) as GOLOS_VISITADO, COUNT(GOLOS_EQUIPA2.ID) as GOLOS_VISITANTE


FROM (ENCONTROS AS E INNER JOIN EQUIPAS AS EQUIPA1 ON [E].VISITADO=EQUIPA1.ID)
INNER JOIN EQUIPAS AS EQUIPA2 ON [E].VISITANTE=EQUIPA2.ID,
(SELECT * FROM GOLOS) as GOLOS_EQUIPA1,
(SELECT * FROM GOLOS) as
GOLOS_EQUIPA2

WHERE [E].ID_COMPETICAO=13
AND
GOLOS_EQUIPA1.EQUIPA = E.VISITADO
AND
GOLOS_EQUIPA1.ID_ENCONTRO = [E].ID
AND GOLOS_EQUIPA2.EQUIPA = E.VISITANTE
AND GOLOS_EQUIPA2.ID_ENCONTRO = [E].ID

GROUPBY [E].ID
ORDER BY [E].ID;

Testa este código

Nem considero este problema muito difícil, mas pelos vistos subestimei-o.
 
alias e no segundo join
INNER JOIN EQUIPAS AS EQUIPA2 ON [E].VISITANTE=EQUIPA2.ID

é aquale problema que falei de mais de dois joins

Isso de múltiplos joins, se forem inner joins pelo menos, não existe problema. Já fiz mais de 5 inner joins encadeados sem problemas.
 
operador em falta

[E].ID_COMPETICAO=13
AND GOLOS_EQUIPA1.EQUIPA = E.VISITADO
AND GOLOS_EQUIPA1.ID_ENCONTRO = [E].ID
AND GOLOS_EQUIPA2.EQUIPA = E.VISITANTE
AND GOLOS_EQUIPA2.ID_ENCONTRO = [E].ID


GROUPBY [E].ID

e aparece esta parte exactamente do script
 
operador em falta

[E].ID_COMPETICAO=13
AND GOLOS_EQUIPA1.EQUIPA = E.VISITADO
AND GOLOS_EQUIPA1.ID_ENCONTRO = [E].ID
AND GOLOS_EQUIPA2.EQUIPA = E.VISITANTE
AND GOLOS_EQUIPA2.ID_ENCONTRO = [E].ID


GROUPBY [E].ID

e aparece esta parte exactamente do script

Estranho, nao noto nada... mete tudo seguido se calhar tem um caracter esquisito pelo meio e não nota o AND:
WHERE [E].ID_COMPETICAO=13 AND GOLOS_EQUIPA1.EQUIPA = E.VISITADO AND GOLOS_EQUIPA1.ID_ENCONTRO = [E].ID AND GOLOS_EQUIPA2.EQUIPA = E.VISITANTE AND GOLOS_EQUIPA2.ID_ENCONTRO = [E].ID
 
o problema é se sintaxe de certeza. por exemplo ontem quando andava de volta do problema dos joins, consegui resolver o problema muito antes de realmente funcionar porque, se só houver um join não é preciso coloca-lo entre () mas se houver dois, então o primeiro join deve ficar entre () e o segundo ja fica fora.

ex: FROM (ENCONTROS AS E INNER JOIN EQUIPAS AS EQUIPA1 ON [E].VISITADO=EQUIPA1.ID)INNER JOIN EQUIPAS AS EQUIPA2 ON [E].VISITANTE=EQUIPA2.ID
 
o problema é se sintaxe de certeza. por exemplo ontem quando andava de volta do problema dos joins, consegui resolver o problema muito antes de realmente funcionar porque, se só houver um join não é preciso coloca-lo entre () mas se houver dois, então o primeiro join deve ficar entre () e o segundo ja fica fora.

ex: FROM (ENCONTROS AS E INNER JOIN EQUIPAS AS EQUIPA1 ON [E].VISITADO=EQUIPA1.ID)INNER JOIN EQUIPAS AS EQUIPA2 ON [E].VISITANTE=EQUIPA2.ID

Os () são opcionais. Podes nem usar parentesis se quiseres.
 
ryu agradeço mesmo muito o teu esforço e paciência em tares aqui comigo este tempo todo, agradeço mesmo!

Mas esta a fica na minha hora... com sorte amanha volto a investigar mais um pouco.
 
Ok... eu também desisto. Ainda por cima se andas a utilizar um motor que nunca usei.
Às tantas é uma coisa simples como meter [] nos alias tipo [GOLOS_EQUIPAS1].equipa = ...

Bem, pelo menos acho que a lógica ficou bem definida para obteres a resposta ao teu problema.
 
Mais uma vez obrigado. amanha se vir que a coisa nao vai, saco um manual de sql para access ou coisa do genero...

Grande abraço valeu
 
Só um último update, como disseste é preciso os () nos joins ou dá "missing operator", vi muito pessoal a queixar-se disso com o Access. Boa sorte.
 
Back
Topo