Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 516279
            [titulo] => Problemas com Inner Join no SQL
            [dataCadastro] => DateTime Object
                (
                    [date] => 2015-04-09 20:36:21
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 244531
            [status] => A
            [isExample] => 
            [NomeUsuario] => Ronaldo Lanhellas
            [Apelido] => 
            [Foto] => 244531_20150129162200.jpg
            [Conteudo] => 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):

[code]
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
[/code]


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. ) )

Problemas com Inner Join no SQL

Fernando Fred
   - 09 abr 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.

#Código

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
aqui mostra a primeira tabela com todos os campos cadstrados (Clique na imagem para abrir em uma nova janela)
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 (Clique na imagem para abrir em uma nova janela)
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 (Clique na imagem para abrir em uma nova janela)

Post mais votado

Ronaldo Lanhellas
   - 09 abr 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):

#Código

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
   - 09 abr 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):

#Código

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.

Fernando Fred
   - 09 abr 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

Ronaldo Lanhellas
   - 09 abr 2015

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

Ronaldo Lanhellas
   - 09 abr 2015

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

Fernando Fred
   - 10 abr 2015

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

Marcos P
   - 11 abr 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...

Fernando Fred
   - 13 abr 2015


Citação:
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

Marcos P
   - 13 abr 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 !

Fernando Fred
   - 13 abr 2015


Citação:
É 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 http://sqlfiddle.com/#!9/fad5c/1/0

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 http://sqlfiddle.com/#!9/fad5c/2

e agora como faço? como resolvo este problema

Marcos P
   - 13 abr 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 ?

Marcos P
   - 13 abr 2015

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

#Código

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

Fernando Fred
   - 13 abr 2015


Citação:
" 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

Marcos P
   - 13 abr 2015

Testou o que eu postei ?

Tenho mais 15 minutos aqui... testa lá !

Fernando Fred
   - 13 abr 2015


Citação:
Veja, lá... se isso resolve seu problema

#Código

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
Clique na imagem para abrir em uma nova janela
Clique na imagem para abrir em uma nova janela

é isso

Marcos P
   - 14 abr 2015

#Código

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

Marcos P
   - 14 abr 2015

E aí ?

Funcionou ?

Fernando Fred
   - 14 abr 2015


Citação:
#Código

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

Fernando Fred
   - 14 abr 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

Marcos P
   - 14 abr 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 ?!?

Fernando Fred
   - 14 abr 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?