Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #95351
    eversonpiza
    Participante

      Olá 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,
      Everson

      #95354
      Marcos Lucas Melo
      Participante

        Bom 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 dados

        #95355
        eversonpiza
        Participante

          Olá 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.

          🙁

          #95357
          burga
          Participante

            Da 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…

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.