Problemas com Inner Join no SQL

09/04/2015

0

e ai pessoal,

minha duvida é o seguinte, eu tenho 2 tabelas tabelaa: codigoa(chave primaria), time(varchar) tabelab: codigob(chave primaria), timecasa(chave estrangeira), timevisitante(chave estrangeira), placarcasa(int),placarvisitante(int).

então timecasa e timevisitante fica relacionado (são chaves estrangeiras) a chave primaria codigo da tabela A, ai quanto eu coloco para fazer o inner join e me mostra os cadastro certo.


SELECT tebelaa.codigoa,tebelaa.time, tabelab.timecasa, tabelab.placarcasa,
tabelab.placarvisitante, tabelab.timevisitante, tebelaa.time, tebelaa.codigoa
FROM tebelaa INNER JOIN tabelab ON tebelaa.codigoa=tabelab.timevisitante



então não vai porque eu quero que ele me mostre o nome do time que é o campo time do banco, mais quando eu coloco este inner join ele me mostra do nome certo com codigo dele?

como é um confronto um time X joga contra vários times, mais o banco não aceita eu cadastrar ele varias vez contra outro time ja cadastrados, como resolvo isso?

então são esta duas perguntas:

resolver como mostrar inner join com 2 chaves estrangeiras de uma tabela ligado na primaria da outra tabela? como é um confronto um time X joga contra vários times, mais o banco não aceita eu cadastrar ele varias vez contra outro time ja cadastrados, como resolvo isso?

Estou usando o WampServer 1.6.1.33

Imagem a baixo demostra o que estou falando
[img:descricao=aqui mostra a primeira tabela com todos os campos cadstrados]http://arquivo.devmedia.com.br/forum/imagem/423816-20150409-182404.png[/img]
[img:descricao=Aqui mostra 2 tabela com todos os campos cadastrado e chamando a chave estrangeira e não consigo cadastrar mais de uma fez o mesmo time na chave estrangeira]http://arquivo.devmedia.com.br/forum/imagem/423816-20150409-182519.png[/img]
[img:descricao=Problema: a coluna codigoa e time da esquerda espelha a da direita e isso não pode, o certo era que a da esquerda chame os time do seus codigoa certo e da direita mesma coisa chame os certos]http://arquivo.devmedia.com.br/forum/imagem/423816-20150409-182651.png[/img]
Fernando Fred

Fernando Fred

Responder

Post mais votado

09/04/2015

Respondendo a sua primeira pergunta, vocÊ pode fazer JOIN de 2 chaves estrangeiras da seguinte forma (O raciocínio é o contrário do que você projetou):

SELECT tebelaa_casa.codigoa,tebelaa_casa.time, tabelab.timecasa, tabelab.placarcasa,
tabelab.placarvisitante, tabelab.timevisitante, tebelaa_visitante.time, tebelaa_visitante.codigoa
FROM tabelab INNER JOIN tebelaa_visitante ON tebelaa_visitante.codigoa=tabelab.timevisitante
INNER JOIN tebelaa_casa ON tebelaa_casa.codigoa=tabelab.timecasa



A sua segunda pergunta não entendi muito bem. Em que tabela você não consegue inserir o mesmo time ? Dê exemplos com operações de SQL.

Ronaldo Lanhellas

Ronaldo Lanhellas
Responder

Mais Posts

14/04/2015

Fernando Fred

SELECT b.timecasa, a2.time,b.placarcasa, 
       b.placarvisitante, b.timevisitante, a1.time 
FROM tabelab b INNER JOIN tebelaa a1 ON a1.codigoa=b.timevisitante
               INNER JOIN tebelaa a2 ON a2.codigoa=b.timecasa


Funcionou Obrigado cara
agora me explica como você fez? como você chegou a esta conclusão?
obrigado de novo
Responder

14/04/2015

Fernando Fred

SELECT a2.time, b.timecasa ,b.placarcasa,
b.placarvisitante, b.timevisitante, a1.time
FROM tabelab b INNER JOIN tebelaa a1 ON a1.codigoa=b.timevisitante
INNER JOIN tebelaa a2 ON a2.codigoa=b.timecasa

o que quer disser tebela a1 e tebelaa a2 a1 e a2 é como se fosse variáveis para o banco?

deixa eu ser mais chato do que ja estou sendo
tem como ao investe de na coluna timecasa e timevisitente a parece o código que ele se relaciona aparecer o nome do time
Responder

14/04/2015

Marcos P

Seguinte... sempre dê retorno nos posts, isso pode ajudar outras pessoas no futuro e acaba dando uma "satisfação" pra quem se envolveu na solução !

Sobre sua primeira pergunta : são duas chaves estrangeiras na tabelab, portanto, dois "inner joins" diferentes para a tabela de times ( uma para cada chave estrangeira )

Quanto a sua segunda pergunta : já está aparecendo o nome do clube... b.timecasa x a2.time e b.timevisitante x a1.time.

Ok ?!?
Responder

14/04/2015

Fernando Fred

sim esta mostrando o nome sim me desculpe a pergunta

é que sou novo na programação e ja me deram esta missão de fez uma pagina na web que faz estatística de confronto entre times e primeiro eu precisava cadastrar estes confrontos e depois mostra que é onde vem esta pergunta do fórum que eu criei


SELECT a2.time, b.timecasa ,b.placarcasa,
b.placarvisitante, b.timevisitante, a1.time
FROM tabelab b INNER JOIN tebelaa a1 ON a1.codigoa=b.timevisitante
INNER JOIN tebelaa a2 ON a2.codigoa=b.timecasa

o que quer disser tebela a1 e tebelaa a2 a1 e a2 é como se fosse variáveis para o banco?
Responder

14/04/2015

Marcos P

a1 e a2, são alias ( apelidos ) das tabelas para uso EXCLUSIVAMENTE na query do lado do banco de dados !
Responder

14/04/2015

Fernando Fred

Obrigado pela ajuda
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar