Problemas com Inner Join no SQL

SQL Server

MySQL

PHP

09/04/2015

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

Curtidas 0

Melhor post

Ronaldo Lanhellas

Ronaldo Lanhellas

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.
GOSTEI 1

Mais Respostas

Ronaldo Lanhellas

Ronaldo Lanhellas

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.
GOSTEI 1
Fernando Fred

Fernando Fred

09/04/2015

Hum então você adicionou mais uma tabela chamado tebelaa_visitante ou não?
então tem 3 tabelas certo?
com 2 inner join certo deste jeito eu nunca fiz

em relação a 2 pergunta eu já resolvi obrigado pela preocupação e por me ajudar

é que o seguinte estou fazendo um programa para web que faz confronto entre times por isso que preciso deste inner join funcionando, ai meu outro problema que irei cria outro fórum sera sobre cadastrar combobox e textfild do php para ir no banco e depois mostrar na outro pagina o resultado usando este inner join. que pegara os placares e no dos time para mostrar os confrontos entre eles.

Obrigado de novo Ronaldo Lanhellas
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

09/04/2015

Não criei nenhuma nova tabela, apenas um alias para a tabela_visitante e outro para tabela_casa
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

09/04/2015

Não criei nenhuma nova tabela, apenas um alias para a tabela_visitante e outro para tabela_casa
GOSTEI 0
Fernando Fred

Fernando Fred

09/04/2015

mais não deu e fala que não existe esta tabela no banco
o que eu faço
GOSTEI 0
Marcos P

Marcos P

09/04/2015

Fernando,

Crie suas tabelas no Fiddle, insira alguns registros de teste e depois avise, para que possamos simular suas consultas por lá !

Suas definições não ficaram muito claras e, do jeito que está, teremos dificuldades em lhe auxiliar.

Vou acompanhar esse post.

Fico no aguardo...
GOSTEI 1
Fernando Fred

Fernando Fred

09/04/2015

Fernando,

Crie suas tabelas no Fiddle, insira alguns registros de teste e depois avise, para que possamos simular suas consultas por lá !

Suas definições não ficaram muito claras e, do jeito que está, teremos dificuldades em lhe auxiliar.

Vou acompanhar esse post.

Fico no aguardo...

eu nunca usei este Fiddle
não sei como usar
GOSTEI 0
Marcos P

Marcos P

09/04/2015

É muito fácil....

Na janela da esquerda crie a estrutura das tabelas.

Depois de criada as tabelas, insira os registros de exemplo na janela da direita !

Veja um exemplo de um material que preparei lá... Exemplo Fiddle

Abra uma nova janela e tente !
GOSTEI 1
Fernando Fred

Fernando Fred

09/04/2015

É muito fácil....

Na janela da esquerda crie a estrutura das tabelas.

Depois de criada as tabelas, insira os registros de exemplo na janela da direita !

Veja um exemplo de um material que preparei lá... Exemplo Fiddle

Abra uma nova janela e tente !

ok entendi olha que é fácil mesmo em bom aqui esta o link da minha duvida [url]http://sqlfiddle.com/#!9/fad5c/1/0[/url]

na 2 coluna que a é do time tem que estar relacionado ao timecasa igual esta na 5 coluna que tambem é de time onde esta certinho o time com o time visitante

e este é o que o Ronaldo estava me ajudando [url]http://sqlfiddle.com/#!9/fad5c/2[/url]

e agora como faço? como resolvo este problema
GOSTEI 0
Marcos P

Marcos P

09/04/2015

" na 2 coluna que a é do time tem que estar relacionado ao timecasa igual esta na 5 coluna que tambem é de time onde esta certinho o time com o time visitante"...

Que frase, hein ?!?

A coluna 2 é "time" e a coluna 5 é "timevisitante"... é isso ?

O relacionamento que está feito é : tabelaa.codigoa=tabelab.timevisitante... ou seja, o time da "tabelaa" é o time visitante na "tabelab".

Agora, você precisa fazer o relacionamento de tabelaa.codigoa=tabelab.codigob ?

Na mesma query ?

Em caso, positivo... que sentido tem isso se já ocorreu o relacionamento da tabelaa.codigoa=tabelab.timevisitante ?
GOSTEI 1
Marcos P

Marcos P

09/04/2015

Veja, lá... se isso resolve seu problema

SELECT a.codigoa, a.time, 
       b.timecasa, b.placarcasa, b.placarvisitante, b.timevisitante, b.codigob
FROM tebelaa a INNER JOIN tabelab b ON a.codigoa=b.timevisitante
UNION ALL
SELECT a.codigoa, a.time, 
       b.timecasa, b.placarcasa, b.placarvisitante, b.timevisitante,b.codigob
FROM tebelaa a INNER JOIN tabelab b ON a.codigoa=b.codigob
GOSTEI 1
Fernando Fred

Fernando Fred

09/04/2015

" na 2 coluna que a é do time tem que estar relacionado ao timecasa igual esta na 5 coluna que tambem é de time onde esta certinho o time com o time visitante"...

Que frase, hein ?!?

A coluna 2 é "time" e a coluna 5 é "timevisitante"... é isso ?

O relacionamento que está feito é : tabelaa.codigoa=tabelab.timevisitante... ou seja, o time da "tabelaa" é o time visitante na "tabelab".

Agora, você precisa fazer o relacionamento de tabelaa.codigoa=tabelab.codigob ?

Na mesma query ?

Em caso, positivo... que sentido tem isso se já ocorreu o relacionamento da tabelaa.codigoa=tabelab.timevisitante ?


Me desculpe eu errei a coluna é a 7 que é coluna do time que relaciona com timevisitante
GOSTEI 0
Marcos P

Marcos P

09/04/2015

Testou o que eu postei ?

Tenho mais 15 minutos aqui... testa lá !
GOSTEI 1
Fernando Fred

Fernando Fred

09/04/2015

Veja, lá... se isso resolve seu problema

SELECT a.codigoa, a.time, 
       b.timecasa, b.placarcasa, b.placarvisitante, b.timevisitante, b.codigob
FROM tebelaa a INNER JOIN tabelab b ON a.codigoa=b.timevisitante
UNION ALL
SELECT a.codigoa, a.time, 
       b.timecasa, b.placarcasa, b.placarvisitante, b.timevisitante,b.codigob
FROM tebelaa a INNER JOIN tabelab b ON a.codigoa=b.codigob


Deixa eu tentar explica melhor Marcos P

timecasa e timevisitante são chaves estrangeiras da chave primaria do codigoa que recebe o nome dos times

quando eu cadastro timecasa e timevisitante esta tudo certo relacionando ao time, so que quando ele vai mostrar no inner join não mostra, para eu saber se esta tudo certo eu cadastrei os time com os nome dos id do campo codigoa, exemplo: codigoa 1 é igual a time A1 e por ai vai.

Então é isso que eu quero, irei mostra um exemplo com imagem para mostrar como eu quero
[img]http://arquivo.devmedia.com.br/forum/imagem/423816-20150413-194528.jpg[/img]
[img]http://arquivo.devmedia.com.br/forum/imagem/423816-20150413-194628.jpg[/img]

é isso
GOSTEI 0
Marcos P

Marcos P

09/04/2015

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
GOSTEI 1
Marcos P

Marcos P

09/04/2015

E aí ?

Funcionou ?
GOSTEI 1
Fernando Fred

Fernando Fred

09/04/2015

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
GOSTEI 0
Fernando Fred

Fernando Fred

09/04/2015

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
GOSTEI 0
Marcos P

Marcos P

09/04/2015

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 ?!?
GOSTEI 1
Fernando Fred

Fernando Fred

09/04/2015

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?
GOSTEI 0
Marcos P

Marcos P

09/04/2015

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

Fernando Fred

09/04/2015

Obrigado pela ajuda
GOSTEI 0
POSTAR