- Este tópico contém 3 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 7 meses atrás por
burga.
-
AutorPosts
-
3 de agosto de 2010 às 5:06 pm #95351
eversonpiza
ParticipanteOlá amigos,
Estou precisando fazer uma consulta, que será bastante usada, e não consegui encontrar um boa forma de executa-la, por isso resolvi recorrer a vocês.
O cenário é o seguinte:
Tenho uma tabela de EQUIPE (id_equipe) uma de TECNICO (id_tecnico) e outra de relacionamento EQUIPE_TECNICO (id_equipe, id_tecnico) que me diz quais são os membros da equipe.O cadastro de uma nova equipe é feito em uma ‘tela’ onde primeiro se seleciona todos os membros da equipe para depois inserir na tabela de relacionamento todos os técnicos de uma vez.
O que preciso fazer é antes de criar a nova equipe, saber se existe outra equipe com uma formação idêntica a que esta sendo criada.
Exemplo:
Estou tentando cadastrar uma equipe com os técnicos A B C.
Só vai dar erro se existir outra equipe A B C, se for A B C D ou A B D é para deixar cadastrar.
Alguém pode me ajudar a montar esta query?
Obrigado,
Everson3 de agosto de 2010 às 6:17 pm #95354Marcos Lucas Melo
ParticipanteBom dia Everson,
Estava analisado seu problema porém vie que você precisara trabalhar ou com uma função ou com uma procedure para fazer a validação, porém você terá que saber o máximo de técnicos que uma equipe pode ter, por causa dos parâmetro.
Ai você colocaria no corpo da função e procedure uma condição e uma variavel de retorno tipo o exemplo a baixo.
If exists (SELECT TC.ID_TECNICO
FROM EQUIPE_TECNICO EC INNER JOIN
TECNICO T ON EC.ID_TECNICO=T.ID_TECNICO
INNER JOIN EQUIPE E ON EC.ID_EQUIPE=E.EQUIPE
WHERE EC.ID_TECNICO IN ()) Then:= ‘Tecnico já a locados a uma equipe’
Espero que tenha ajuda. 😀
Atenciosamente,
Marcos Lucas
Projetista de dados3 de agosto de 2010 às 6:29 pm #95355eversonpiza
ParticipanteOlá Marcos,
Nesse seu exemplo o select vai trazer resultado, ou seja, o if vai retornar TRUE se encontrar algum técnico em qualquer equipe, não exatamente se encontrar todos os técnicos na mesma equipe.
E também não posso limitar o tamanho da equipe, com isso não terei como saber o tamanho máximo dela.
🙁
3 de agosto de 2010 às 9:20 pm #95357burga
ParticipanteDa pra fazer algo do tipo:
select id_equipe
from equipe_tecnico t1
where
exists (select 1
from equipe_tecnico t2
where t1.id_equipe = t2.id_equipe
and t2.id_tecnico = 1)
and exists (select 1
from equipe_tecnico t2
where t1.id_equipe = t2.id_equipe
and t2.id_tecnico = 2)
and exists (select 1
from equipe_tecnico t2
where t1.id_equipe = t2.id_equipe
and t2.id_tecnico = 3)
and not exists ((select 1
from equipe_tecnico t2
where t1.id_equipe = t2.id_equipe
and t2.id_tecnico not in (1,2,3)));Considerando que você informe os ids dos tecnicos nas subconsultas das cláusulas exists, e que você possa montar a consulta dinamicamente via aplicação, você pode fazer da forma apresentada…
-
AutorPosts
- Você deve fazer login para responder a este tópico.