none
Explicação para o select abaixo RRS feed

  • Discussão Geral

  • Pessoal, conforme as tabelas abaixo:

    Projeto (IDProjeto, Nome, DataInicio, DataFim)
    Funcionario (Matricula, Nome, DataNascimento)
    Participacao_Projeto (IDProjeto, Matricula )

    O comando SQL que retorna o nome somente dos funcionários que participaram de TODOS os projetos é:

    SELECT FUNCIONARIO.NOME FROM FUNCIONARIO
        WHERE NOT EXISTS(
    SELECT * FROM PROJETO
        WHERE NOT EXISTS(
    SELECT * FROM
        PARTICIPACAO_PROJETO
        WHERE PARTICIPACAO_PROJETO.IDPROJETO = PROJETO.IDPROJETO
        AND PARTICIPACAO_PROJETO.MATRICULA = FUNCIONARIO.MATRICULA))

    Porém, não o entendi muito bem. Alguém conseguiria me explicá-lo melhor?

    Obrigado

    segunda-feira, 13 de agosto de 2012 11:42

Todas as Respostas

  • Bruno,

    Não sei de onde você tirou essa consulta, mas ela não traz o que você falou...

    O que essa consulta faz, é não retornar absolutamente nada, caso você tenha qualquer registro na tabela projeto, independentemente do que houver na tabela participacao_projeto.

    Espero ter ajudado

    segunda-feira, 13 de agosto de 2012 12:55
  • Obrigado pela resposta Logan.

    Estranho, isn't it? Pois então, ela fucniona sim. Esta é a resposta da questão número 57 do último concurso do BNDES.

    Inclusive criei um BD teste no SQL Server para verificar, e a query trás corretamente os registros (nome somente dos funcionários que participaram de TODOS os projetos).

    segunda-feira, 13 de agosto de 2012 21:22
  • Bruno, pior é que é verdade mesmo...

    Eu também havia feito o script, mas inverti os valores no insert da tabela participacao_projeto e acabou furando a verificação, desculpa.

    Vou dar uma estudada nela melhor, pois realmente é uma questão curiosa :-)

    terça-feira, 14 de agosto de 2012 11:07