13
respostas

Duvidas

Estou utlizando dois banco

porém ao fazer um inner join o mesmo não retorna resultado

Vide:

https://docs.google.com/document/d/1LM8O_VGXVsPkJ-RWPHxftCNTMtVoMZZtDCpZVkb3xKo/edit?usp=sharing

13 respostas

Olá Fabiana, tudo bem? Pra mim essa consulta aqui:

SELECT * FROM vendas_sucos.vendedores A
INNER JOIN SUCOS_VENDAS.tabela_de_vendedores B
ON A.MATRICULA = SUBSTRING(B.MATRICULA,3,3);

Executou como o esperado, acho que o problema foi que você não indicou o banco de dados da tabela vendedores.

Executa e fala pra gente se deu certo!

O banco tava selecionando. Ou seja não seria necessário mencionar a banco.

Outra coisa, se vc verificar a consulta não apresenta erros ela apenas não retorna os dados da tabela. Caso eu não informe o banco daria um erro (tabela não existe) algo assim.

Veja novamente o link https://docs.google.com/document/d/1LM8O_VGXVsPkJ-RWPHxftCNTMtVoMZZtDCpZVkb3xKo/edit?usp=sharing

Entendi Fabiana, porém você poderia colocar aqui no tópico qual foi a saída no painel Action Output, pra gente poder entender o que está acontecendo. Então executa a consulta novamente e coloca a imagem com a parte de Action Output no Google Drive pra gente entender e encontrar a solução!

Jonilson,

O select é feito com sucesso.

https://docs.google.com/document/d/1LM8O_VGXVsPkJ-RWPHxftCNTMtVoMZZtDCpZVkb3xKo/edit

Fabiana, desculpa a demora, é realmente bastante estranho, fiz os testes aqui e executou normalmente, e fiz diversas vezes, mesmo sem indicar o banco atual, mais mesmo assim você tentou executar a consulta indicando o banco de dados atual:

SELECT * FROM vendas_sucos.vendedores A
INNER JOIN SUCOS_VENDAS.tabela_de_vendedores B
ON A.MATRICULA = SUBSTRING(B.MATRICULA,3,3);

Só pra gente saber o resultado! E um outro teste, você poderia tentar executar essa mesma consulta:

SELECT * FROM VENDEDORES A
INNER JOIN SUCOS_VENDAS.TABELA_DE_VENDEDORES B
ON A.MATRICULA = SUBSTRING(B.MATRICULA,3,3);

Pelo terminal do MySQL?

Para isso você pode ir até a a pasta de instalação do MySQL pelo terminal, geralmente é a pasta: C:\Program Files\MySQL\MySQL Server 8.0\bin>`.

E depois você deve entrar no MySQL com o seguinte comando:

mysql -u nome_do_seu_usuario_do_mysql -p

Deve ser solicitado a senha, então você informa e tecla "ENTER", logo depois você executa o comando use vendas_sucos; e depois executa a consulta:

SELECT * FROM VENDEDORES A
INNER JOIN SUCOS_VENDAS.TABELA_DE_VENDEDORES B
ON A.MATRICULA = SUBSTRING(B.MATRICULA,3,3);

No meu caso deu certo como você pode ver na imagem: Execução no MySQL

E fala pra gente o resultado!

não funcionou.

https://docs.google.com/document/d/1LM8O_VGXVsPkJ-RWPHxftCNTMtVoMZZtDCpZVkb3xKo/edit

Pq vc consegue colocar anexo e eu não?

Sobre a imagem de "anexo" é simples, você pode colocar as imagens no imgur ou em outro site do gênero, que disponibilizam imagens de forma gratuita, e você pode copiar o link como na imagem abaixo: imagem

Colocar imagem no fórum

E depois colocar o seguinte texto aqui no fórum :

Texto no fórum

Pronto, você já vai conseguir visualizar a imagem que vai aparecer junto com seu tópico, ou resposta clicando no botão EXPANDIR aqui do campo de texto. Você pode ler esse artigo aqui da Alura para saber mais detalhes.

Agora sobre o problema, é realmente bastante estranho, ele está retornando um conjunto vazio, sendo assim, você poderia realizar as seguintes consultas separadamente e informando a base de dados e colocar aqui pra gente poder verificar novamente:

  • Primeira consulta:
    SELECT * FROM vendas_sucos.VENDEDORES;
  • Segunda consulta:
    SELECT * FROM sucos_venda.TABELA_DE_VENDEDORES;

Fico aguardando retorno!

Feito.

select select

Agora entendi o problema Fabiana, note que os campos MATRICULA, tanto em vendas_sucos.VENDEDORES quanto em sucos_vendas.TABELA_DE_VENDEDORES, estão com zeros (0) antes do números, ou seja estão assim:

+-----------+
| MATRICULA |
+-----------+
| 00235     |
| 00236     |
| 00237     |
| 00238     |
+-----------+

Por isso a consulta não está funcionando, então se você tentar assim:

SELECT * FROM VENDEDORES A
INNER JOIN SUCOS_VENDAS.TABELA_DE_VENDEDORES B
ON SUBSTRING(A.MATRICULA,3,3) = SUBSTRING(B.MATRICULA,3,3);

Vai funcionar corretamente, ou então sem usar o SUBSTRING dessa forma:

SELECT * FROM VENDEDORES A
INNER JOIN SUCOS_VENDAS.TABELA_DE_VENDEDORES B
ON A.MATRICULA = B.MATRICULA;

Também vai funcionar, o problema não está nos comandos usados e sim nos dados que não se encaixaram na igualdade.

Espero ter esclarecido seu problema!

Jonilson, boa noite.

Entendi o que vc falou, ao utilizar a função de substring os campos ficam com valores diferentes. O banco sucos vendas eu fiz no primeiro curso de mysql e o vendas sucos nesse curso de agora. Só fiz esse select pois faria um update de uma tabela pra outra onde na primeira tabela o campo matricula era composto por 235 e na outra por 000235 por isso seria necessário utilizar substring. Enfim como tava focada na aula tb não reparei essa diferença... Já conversamos outra vezes sobre certas divergências em alguns ponto do curso, o curso de bd é fantástico mas acredito que como qlq outro sempre é necessário uma revisada no conteúdo. Nesse cenário a gente ficou uma semana batendo cabeça.

É verdade Fabiana foi quase uma semana pra identificarmos, porém erro meu, peço desculpas, não dei atenção aos dados logo de inicio e fiquei buscando algum problema no comando em si. Mas é assim mesmo, que bom que conseguimos resolver o problema! E qualquer dúvida só colocar aqui no fórum que vamos ajudar!

De forma alguma o erro foi seu eu tb não observei esse pequeno detalhe da string