Ir ao conteúdo
  • Cadastre-se

problemas com INNER JOIN - Não estou conseguindo unir valores de duas tabelas.


Posts recomendados

Estou com uma dúvida em relacinamento entro tabelas...
Preciso mesclar os valores de duas tabelas, preciso que a tabela advogados seja chamada pelo id_adv da tabela processos, porém, não estou conseguindo...

Podem me ajudar?

 

-----------------
|Table Processos|
-----------------
------------------------------------
|id_proc|proces|cliente|info|id_adv|
------------------------------------

----

-----------------
|Table advogados|
-----------------
---------------------------------------------------------------------
|id|advogado|telefone|rua|numero|comp|bairro|cep|cidade|estado|email|
---------------------------------------------------------------------

 

Processo: Contém os números de processo, o cliente do advogado (correspondente ao processo), CPF ou CNPJ (info) e o id do advogado cadastrado na tabela Advogados

Advogados: Contém todos os advogados cadastrados no sistema, todos eles com um número identificador.

Preciso fazer uma consulta e apresentar todos os processos cadastrados no sistema, porém não estou conseguindo usar o INNER JOIN direito... Estou usando assim:

$query = "SELECT `id`.*, `advogado`. `telefone,`. `rua`. `numero`. `comp`. `bairro`. `cep`. `cidade`. `estado`. `email` FROM `processos` INNER JOIN `advogados` ON `id_proc`. `proces`. `cliente`. `info`. `id_adv` = `advogados`.`id` ORDER BY ASC";

Eu preciso mostrar desde o primeiro processo cadastrado, com o ID 1, até o último, porém não estou conseguindo chamar o processo e relacionar com as informações do advogado cadastrado...

Preciso mais ou menos disto aqui:

Processo: XXXXXXX
Cliente: Fulano de tal
CPF/CNPJ: XXXXXXX
Advogado: Ciclano
Telefone: (xx) xxxx-xxxx
Rua: XXXX
Número: XXX
Comp: XXX
Bairo: XXXXXXX
CEP: XXXXX-XXX
Cidade: XXXXX
Estado: ZZ
Email: [email protected]

Lembrando que de alguma forma eu tenho que chamar as informações do advogado e mesclar com o resto através do id_adv da tabela processos

Alguém pode me ajudar com isso?

 

Estou desesperado, não estou conseguindo fazer isto a uns 3 dias, já li inúmeros tutoriais, mas nenhum deu certo para o que eu preciso... Pensei em fazer com um while normal e depois unir simplesmente, mas desta forma fica mais fácil de se trabalhar, pelo que vi...

 

Obrigado desde Já.

 

Jakson Fischer

Link para o comentário
Compartilhar em outros sites

Primeira dica:
 - Indente seu código

Muita gente tem mania de não indentar código sql, mas sempre é bom, pois facilita pra você na criação e facilita na manutenção da mesma.

 

Segunda dica:

 - Dê alias para suas tabelas quando usar joins, para evitar conflitos entre os dados, e pra não ter que escrever repetidas vezes nomes de tabelas grandes (quando for o caso).

 

Mas respondendo a sua questão, acredito que o código que você busca seja mais ou menos esse:

 

SELECT 
	a.*,
	p.*
FROM processos p 
INNER JOIN advogados a ON (a.id = p.id_proc)
ORDER BY ASC

Não entendi de onde vem cada dado, então selecionei todos os dados das duas tabelas. Para cada dado você deve colocar o alias da tabela (a ou p) e o nome da coluna. Ex.:

 

SELECT 
	p.id,
	a.nome
FROM processos p
INNER JOIN advogados a ON (a.id = p.adv_id)

 

Link para o comentário
Compartilhar em outros sites

@JonathanMMachado Obrigado pela dica da endentação, não conhecia ela com MySQL, apenas PHP.

Bom, eu não consegui entender direito pra falar a verdade haha

Eu tenho que apresentar este resultado:

 

 

Processo: XXXXXXX - Table processos
Cliente: Fulano de tal - Table processos
CPF/CNPJ: XXXXXXX - Table processos
Advogado: Ciclano - Este campo está recebendo um valor numérico que corresponde ao ID do advogado que está cadastrado na tabela advogados, por exemplo, 1235, preciso que este número seja não visto como número, mas como o nome do advogado, ex.:

 

id: 1235 - Advogado: Jakson Fischer

 

Preciso que ao invés do 1235 apareça o nome Jakson Fischer e com ele os dados seguintes


Telefone: (xx) xxxx-xxxx - Table advogados
Rua: XXXX - Table advogados
Número: XXX - Table advogados
Comp: XXX - Table advogados
Bairo: XXXXXXX - Table advogados
CEP: XXXXX-XXX - Table advogados
Cidade: XXXXX - Table advogados
Estado: ZZ - Table advogados
Email: [email protected] - Table advogados

 

 

Conseguiu entender?

 

P.S.: o alias eu não havia entendido também antes de tu me explicar, muito obrigado :)

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Jakson Fischer Olá seja bem vindo em nosso Clube do Hardware.

 

Você quer apresentar os dados com relacionamento entre tabelas usando a clausula inner join certo?

 

Primeiro você precisa entender o seu banco de dados.

Nas suas tabelas, possuem chave primária e estrangeira.

Onde, na tabela  de advogados, está a primária  e na tabela processos está a estrangeira chamada de id_adv.

 

Para que funcione o inner join, é preciso que suas duas tabelas sejam do tipo InnerDB e não "MyISAM".

 

Na tabela advogado precisa ter um índice que indica que o campo ID é quem vai se relacionar com a chave estrangeira, fazemos isso na tabela controladora no caso" advogados".

 

Depois de ter o índice, você é capaz de fazer o relacionamento 1:N entre as duas tabelas, fazendo com que o campo id_adv da tabela processos seja a chave estrangeira que recebe o ID da chave primária ID contida na tabela advogados.

 

Deixo em anexo o desenho.

 

Agora a sua consulta fica assim quando o relacionamento está feito corretamente:

SELECT Processos.proces, Processos.cliente, Processos.info,
           advogados.advogado, advogados.telefone,
           advogados.rua, advogados.numero,
           advogados.comp, advogados.bairro,
           advogados.cep, advogados.cidade,
           advogados.estado, advogados.email
FROM advogados
INNER JOIN  Processos ON Processos.id_adv = advogados.id    

Basicamente é isso. Mas só vai funcionar SE e somente SE os relacionamentos foram feitos corretamente, com seus índices e as tabelas serem do tipo innoDB

relacionamento-sql.png

adicionado 2 minutos depois

 

PS: Antes de fazer com aliases como sugerido pelo colega acima, procure fazer de forma completa para você entender.  

exemplo: Nome_da_tabela.nome_do_campo

Link para o comentário
Compartilhar em outros sites

@Jakson Fischer Foi mal cara, só falei e não expliquei kkk

 

A questão da indentação eu me baseio na indentação que o mysql workbench cria (tem um botão lá que indenta o código).

 

Em relação ao alias é um "apelido" que você dá a sua tabela, no caso da query que eu passei, eu criei o alias a para advogado e p para processos.

 

E eu não tinha visto que você tinha passado cada coluna de cada tabela, por isso fiz aquela query genérica.

Mas acho que a resposta acima fica bem clara com os dados que você quer.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!