João Paulo Ricardo Postado Fevereiro 3, 2014 Denunciar Share Postado Fevereiro 3, 2014 Boa tarde pessoal, Tenho uma tabela de usuário e uma de chamado. Na de usuário tenho o id (PK) e o nome. Na de chamado, tenho o atendente(FK) e o responsável(FK). Esses dois campos não chave estrangeira do id do usuário. Dúvida: Como fazer uma junção para trazer o nome do usuário para os dois campos? Obs: Atendente e responsável, podem ser usuários diferentes. Abraços João Paulo Link para o comentário Compartilhar em outros sites More sharing options...
0 Markus Magnus Postado Fevereiro 3, 2014 Denunciar Share Postado Fevereiro 3, 2014 (editado) Já tentou assim...? SELECT * FROM chamado, usuario as atendente, usuario as responsavel WHERE chamado.id_atendente = atendente.id and chamado.id_responsavel = responsavel.id Espero ter ajudado Editado Fevereiro 3, 2014 por Markus Magnus Link para o comentário Compartilhar em outros sites More sharing options...
0 João Paulo Ricardo Postado Fevereiro 3, 2014 Autor Denunciar Share Postado Fevereiro 3, 2014 Markus, não seria: WHERE chamado.id_atendente = usuarioid and chamado.id_responsavel = usuarioid ? Mesmo assim deu erro: #1052 - Column 'usuarioid' in where clause is ambiguous Segue campos: tabela usuario: usuarioId, usuarioNome Chamado: chamadoResponsavel, chamadoAtendente Até Link para o comentário Compartilhar em outros sites More sharing options...
0 Markus Magnus Postado Fevereiro 3, 2014 Denunciar Share Postado Fevereiro 3, 2014 Não, porque repare que na clausula FROM eu chamo a tabela usuario duas vezes e como o MySQL vai diferenciar uma da outra? Através dos "apelidos" que eu dei a cada uma (atendente e responsavel), logo quando eu vou chama-las na clausula WHERE eu cito os "apelidos", para que o MySQL entenda com qual eu estou trabalhando de cada vez. Usando do jeito que eu escrevi aparece algum erro? Tem como você dar um Exportar nas tabelas e colar aqui pra que eu saiba realmente o nome de cada campo? PS.: Os campos id_atendente, atendente.id, id_responsavel e responsavel.id devem ser trocados pelos nomes reais de cada campo só usei esses nomes para exemplificar o SELECT. Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Fevereiro 4, 2014 Denunciar Share Postado Fevereiro 4, 2014 Tente assim:SELECT * FROM chamado c INNER JOIN usuario a ON c.idatendente = a.idusuario INNER JOIN usuario r ON c.idresponsavel = r.idusuarioonde c.idatendente e c.idresponsavel são os nomes que eu dei para os respectivos atributos em chamado (já que não sei os nomes corretos e tinha que mostrar um exemplo) Link para o comentário Compartilhar em outros sites More sharing options...
0 Markus Magnus Postado Fevereiro 4, 2014 Denunciar Share Postado Fevereiro 4, 2014 Denis Courcy O "as" entre a tabela e os "apelidos" é opcional? Qual é a diferença entre usar apenas a cláusula FROM e usar os JOINS? Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Fevereiro 4, 2014 Denunciar Share Postado Fevereiro 4, 2014 O "as" entre a tabela e os "apelidos" é opcional?Sim. O AS entre o nome da tabela e seu apelido é opcional.Qual é a diferença entre usar apenas a cláusula FROM e usar os JOINS?Quando se trata de INNER JOIN não há diferença na execução. Apenas muito mais didático. Lembre-se Hoje você faz e amanhã outro dará manutenção.Verifique que a cláusula ON é a condicional entre as duas ligações. Qualquer outro comparativo deverá ficar na cláusula WHERE. Da forma como você escreve se houver uma cláusula WHERE com muitos elementos poderá haver erro e não será fácil encontrá-lo. Link para o comentário Compartilhar em outros sites More sharing options...
0 Markus Magnus Postado Fevereiro 4, 2014 Denunciar Share Postado Fevereiro 4, 2014 Entendi, você poderia me explicar qual é a vantagem e de repente casos que seja realmente necessário o uso de LEFT e RIGHT JOIN? Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Fevereiro 4, 2014 Denunciar Share Postado Fevereiro 4, 2014 Entendi, você poderia me explicar qual é a vantagem e de repente casos que seja realmente necessário o uso de LEFT e RIGHT JOIN?Permita-me uma brincadeira, você deve voltar aos tempos do primeiro ano do segundo grau, onde se fala de relações entre conjuntos.ehehehe.No exemplo abaixo:SELECT descricaotipopagamento, nomecartao, valor, valortaxacartao from caixa cx INNER JOIN tipopagamento tp ON tp.idTipoPagamento = cx.idTipoPagamento LEFT JOIN cartaocredito cr ON cr.idCartao = cx.idCartao WHERE dataevento > '2013-12-31'Verifique que estou listando todo o movimento de caixa de 2014 até agora;Pode haver tipos de pagamento que não são cartões de crédito. Quando isto acontecer os dados da tabela cartaocredito virão NULONo caso de tipopagamento sempre haverá uma resposta. Por isso o uso de INNER.INNER é Intercessão de conjuntos. Só traz os elementos resultantes que aparecem nos dois conjuntos. Se existir em um conjunto e não existir no outro ele não traz nada.LEFT trará TODOS os elementos do conjunto a esquerda e somente os elementos do conjunto a direita quando eles existirem. Link para o comentário Compartilhar em outros sites More sharing options...
0 Markus Magnus Postado Fevereiro 4, 2014 Denunciar Share Postado Fevereiro 4, 2014 Agora eu entendi. Nuss agora eu tenho um monte de SELECTs dentro de SELECTs, para fazer a mesma coisa que o LEFT JOIN, para alterar ahuahua. O RIGHT JOIN é a mesma coisa que o LEFT JOIN só que inverte a posição das tabelas retorna TODOS os registros da direita e os da esquerda só quando existirem, certo? É bem estranho pensar em fazer uma consulta onde a tabela que eu quero todos os registros no JOIN e a tabela com informações adicionais no FROM. Obrigado pela atenção. Link para o comentário Compartilhar em outros sites More sharing options...
0 João Paulo Ricardo Postado Fevereiro 4, 2014 Autor Denunciar Share Postado Fevereiro 4, 2014 Deu certo Denis, Apenas coloquei um apelido para poder saber qual campo usuarioNome se referia ao responsável e o atendente. Ficou assim: SELECT *, a.usuarioNome as atendente, r.usuarioNome as responsavel FROM chamado INNER JOIN usuario a ON chamadoAtendente = a.usuarioid INNER JOIN usuario r ON chamadoResponsavel = r.usuarioid Obrigado Denis e Markus. Abraços Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
João Paulo Ricardo
Link para o comentário
Compartilhar em outros sites
10 respostass a esta questão
Posts Recomendados