Duvida em SQL - Help!

18/09/2014

0

Galera,

Estou começando meu aprendizado em SQL e encontrei um problema que não consigo solucionar.

Suponha que temos uma tabela de empresas e outra de um "arquivo" que essa empresa deve enviar.

Consegui listar todas empresas que não enviaram com o seguinte o querry:

select
nome,
responsavel
from empresas as emp
where
codigo not in (select codigoemp from arquivo where mes = 7 and ano = 2014)

Nesse caso, caso o codigo de identificação da empresa não estivesse contido no arquivo, significaria que este não enviou no mês especificado.
Sabendo que, essas empresas enviaram ao menos uma vez o arquivo e na tabela de arquivo tem o nome do responsável do envio e o email do mesmo.

O que eu queria fazer é conseguir o email de todas empresas que não enviaram. Se alguém souber alguma solução sem usar tabela temporária, agradeço muito.
Thayrone Santos

Thayrone Santos

Responder

Posts

18/09/2014

Leandro Chiodini

Bom dia Thayrone.
Primeiramente temos que entender o seguinte.
O e-mail esta nesta tabela de arquivo certo?
Se sim, vai existir um registro mesmo não tendo enviado o arquivo?

se sim..

Você pode resolver da seguinte forma.

select
emp.nome,
emp.responsavel,
arq.email
from empresas as emp, arquivo as arq
where
arq.mes = 7 and arq.ano = 2014

Voce precisa ter um relacionamento entre as duas tabelas.
algo como
arq.IdEmpresa = emp.IdEmpresa

att
Chiodini
Responder

18/09/2014

Thayrone Santos

Chiodini,

Desculpas pela mal formulação da minha duvida e obrigado pela atenção.

Na Tabela de empresas temos: Nome, codigo, email, responsavel pelo envio.
Na Tabela de arquivos temos: codigoempresa, email, resposavel pelo envio.

As tabelas funcionam da seguinte maneira.

Em aquivos SOMENTE as empresas que enviaram possuem dados referente a tal mês.
(suponha que as empresas enviaram ao menos uma vez e por isso é certeza de encontra o Email do responsável pelo envio)

Em Empresas, caso o arquivo de uma 'x' empresa não sido enviado em tal mês, os campos das informações email e responsavel ficarão vazias.

Esse Where que você usou consegue o email das empresas que enviaram, mas, eu quero das que não enviaram. No momento que especifico o mes e ano do arquivo, caso a empresa não tenha enviado, o dados do arquivo não existem naquele mês pra empresa sab?

select
nome,
responsavel
from empresas as emp
where
codigo not in (select codigoemp from arquivo where mes = 7 and ano = 2014)

Com esse Where consegui pegar todos que não enviaram, pois não tem nenhum dado deles no mês 07 do ano 2014.
Tentei adicionar um subselect após responsavel:
(select arquivo.email from arquivos where arquivo.codigo = emp.codigo) as ultimo email
mas deu erro ; /
Responder

18/09/2014

Leandro Chiodini

Opa agora sim amigo.
tente algo asism

select
emp.nome,
emp.responsavel,
arq.email
from empresas as emp, arquivo as arq
where
arq.codigoempresa not in (select codigoempresa from arquivo where mes = 7 and ano = 2014)


deve funcionar.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar