Jump to content

Archived

This topic is now archived and is closed to further replies.

mnmn

SQL - problema ao relacionar atríbutos de duas tabelas com claúsula IN

Recommended Posts

Olá amigos, poderiam me ajudar?


Tenho no meu banco de dados uma tabela salao que tem N registros na tabela funcionários.




SELECT s.nome_salao, f.nome_funcionario FROM funcionario f NATURAL JOIN salao s WHERE s.email_salao IN (SELECT email_salao FROM salao WHERE codigo_estado = 2 AND cidade_salao = 'São Paulo' AND bairro_salao = 'Limoeiros') ORDER BY f.nome_funcionario;




Tenho uma query em que desejo selecionar o nome do salão ao qual o funcionário pertence. Porém quero fazer essa pesquisa para todos os salões que estejam em determinada localidade.


A subquery retorna dois salões, e para cada salão tenho vários funcionários.


Então quero retornar somente o nome do salão ao qual cada um dos funcionários pertence.

Share this post


Link to post
Share on other sites

Ajude a gente

 

Idente a sql

Publique as estruturas da tabela

Share this post


Link to post
Share on other sites

Olá Motta! Consegui resolver, fiz assim:

SELECT s.nome_salao, f.nome_funcionario 
FROM funcionario f 
INNER JOIN salao s ON s.email_salao = f.email_salao
WHERE  s.codigo_estado = 2 AND s.cidade_salao = 'São Paulo' AND s.bairro_salao = 'Limoeiros'
ORDER BY f.nome_funcionario;

Muito Obrigado!!!

Share this post


Link to post
Share on other sites

Motta, estou com um outro probleminha, poderia ajudar?

 

Preciso selecionar todos horários dos funcionários (horario_horariofuncionario) de acordo com a filtragem de serviço, data e dia da semana.

Estou conseguindo fazer esse select normalmente, porém como são vários horários (horario_horariofuncionario) está sendo gerado um novo resultado para cada novo horário encontrado...

E nesses resultados, claro, o único atríbuto que os diferencia é o horario_horariofuncionario o resto dos atríbutos são todos iguais.

Então o que eu gostaria é que todos os horario_horariofuncionario fossem retornados em APENAS UM RESULTADO juntamente com o restante dos atríbutos em vez de retornar um novo resultado para cada horario_horariofuncionario...

SELECT hf.horario_horariofuncionario,
hf.codigo_horariofuncionario,
s.nome_servico,
ss.tempo_servicosalao,
ss.preco_servicosalao,
hf.data_horariofuncionario,
ds.nome_diasemana,
f.nome_funcionario,
f.apelido_funcionario,
f.foto_funcionario FROM servicosalao ss
INNER JOIN servico s
INNER JOIN diasemana ds
INNER JOIN horariofuncionario hf
INNER JOIN funcionario f
INNER JOIN servicofuncionario sf
ON hf.codigo_funcionario = f.codigo_funcionario 
WHERE sf.codigo_servicosalao = :servico 
AND hf.data_horariofuncionario = :data 
AND ds.nome_diasemana = :diaDaSemana 
AND hf.codigo_statushorariofuncionario = 1;

Share this post


Link to post
Share on other sites

A cláusula ON especifica o relacionamento entre as tabelas.

 

Todos os INNER JOIN precisam ter a cláusula ON, assim como você fez no exemplo abaixo.

 

Olá Motta! Consegui resolver, fiz assim:

SELECT s.nome_salao, f.nome_funcionario 
FROM funcionario f 
INNER JOIN salao s ON s.email_salao = f.email_salao
WHERE  s.codigo_estado = 2 AND s.cidade_salao = 'São Paulo' AND s.bairro_salao = 'Limoeiros'
ORDER BY f.nome_funcionario;

Muito Obrigado!!!

 

 

Vi este post antes deste.

Share this post


Link to post
Share on other sites

  • Similar Content

    • By andreluis78
      Olá a todos.
      Criei um procedimento para verificar se um usuário está cadastrado no banco de dados.
      Utilizo Firebird como BD e componentes Zeos para acessar o banco.
      Resolvi criar uma query em tempo de execução para fazer a verificação. Não dá nenhum erro, porém, quando digito o nome do usuário no Edit e clico
      no botão que executa o procedimento, ele dá ''usuário inexistente'', mesmo se o nome do usuário estiver cadastrado no banco.
       
      Segue o código:
       
      procedure Tfrm_login.SpeedButton1Click(Sender: TObject); var Qry : TZQuery; begin   Qry:=TZQuery.Create(nil);   Qry.Connection := dm_dados.ZConnection1;  //componente de conexão   Qry.SQL.Add('select codigo, nome, acessar, user, pass from clientes');   Qry.Open;   if Qry.Locate('USER',Edit1.Text,[]) then   begin     ShowMessage('usuário cadastrado');   end   else   begin     ShowMessage('usuário inexistente');     Edit1.SetFocus;   end;   FreeAndNil(Qry); end;  
      Se alguém puder ajudar agradeço desde já.
      Obrigado
    • By diegosrg
      Olá pessoal!
      Preciso de um help por favor.
      Seguinte, tenho uma base de dados abaixo e preciso incluir uma coluna com os valores acumulado do mês independente do produto.Base atual:
      YEARMONTH / PRODUTO/ VALOR 202001 /ABC / 123,00 202001 /DEF / 234,00 202002 /ABC / 289,00 202002 /GHU / 222,00  
      Com a nova coluna ficaria assim:
      YEARMONTH / PRODUTO/ VALOR / VALOR ACUMULADO 202001 /ABC / 123,00 / 357,00 202001 /DEF / 234,00 / 357,00 202002 /ABC / 289,00 / 511 202002 /GHU / 222,00 / 511  
      Alguém tem alguma dica?!
      Desde já agradeço
    • By danilo759
      Estou com uma dúvida, em uma tabelinha é cadastrado a data em uma coluna e a hora em outra coluna, então para "juntar" podemos usar CONCAT() no SELECT. Tudo certo...
       
      SELECT id, CONCAT(data_ini, ' ', hora_ini) as inicio FROM tabela

      Retorna como esperado:

       

      Minha dúvida é, se eu quiser exibir o horário de término para ficar assim como seria a consulta? Lembrando que não existe as colunas data_final e horario_final.

      2020-09-13 03:00:00 2020-09-13 04:00:00
      2020-09-13 04:00:00 2020-09-13 05:00:00
      2020-09-13 05:00:00 ....
    • By FabianoSouza
      Pessoal, como se faz para definir a região de um determinado CEP?
      Preciso criar uma flag no meu select para dizer se a pessoa mora na ZL, ZO, ZS ou ZN.
      Alguém tem uma relação de CEP confiável para eu poder iniciar esse trabalho?
       
       
      Obrigado.
    • By Matheus Bispo
      Boa noite galera, estou com uma dúvida.
       
      Tenho uma tabela chamada Usuários, onde lá possuo ID, NOME, EMAIL e SENHA.
       
      Estou desenvolvendo um sistema de relatório de logs, e na minha tabela logs, eu tenho o log_usuario e log_afetado, AMBOS REFERENCIAM o ID da tabela Usuários.
       
      A minha dúvida é... Como eu posso trazer os NOMES desses, no select?
       
      O que eu estou fazendo é esse daqui:
       
      $this->Select = "SELECT log.log_id as id, log.log_ip, log.log_usuario, log.log_afetado, log.log_acao, log.log_tempo, log1.usu_nome as dono_nome, log2.usu_nome as afetado_nome FROM logs log    LEFT OUTER JOIN
                  usuarios as log1 ON log_usuario = log1.usu_id LEFT OUTER JOIN
                  usuarios as log2 ON log_afetado = log2.usu_id WHERE
                  log.log_usuario = :log_usuario";
       
      Mas não estou conseguindo trazer os nomes, utilizando um var_dump(), tráz apenas os IDs. O que eu estaria fazendo de errado?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.