none
SP com EXCEPT ou outra hipotese RRS feed

  • Pergunta

  • Boas..

    Tenho duas tabelas...

    Entradas
    CodEntrada
    DataEntrada
    (...)

    Saidas
    CodSaida
    DataSaida
    (...)

    Saidas_Linhas
    CodSaidaLinha
    CodSaida
    CodEntrada

    Agora preciso de saber os dados da Entrada que aparecem na tabela Saidas_Linhas e os que não aparecem.

    Pensei em fazer 
    SELECT     dbo.Mobiliario_Entradas.CodEntrada
    FROM         dbo.Mobiliario_Entradas
    EXCEPT
    SELECT     dbo.Mobiliario_saidaslinhas.CodEntrada
    FROM         dbo.Mobiliario_saidaslinhas

    Mas depois não consigo mostrar os dados da entrada..

    Obrigado desde já..

    quarta-feira, 28 de janeiro de 2009 15:05

Respostas

  • Olá Vitor,

     

    Você não passou maiores informações sobre quantidade de registros ou mesmo quantas vezes esta query será executada, mas dê uma olhada nas duas opções abaixo, para ver se clareia um pouco as tuas idéias.

     

    Code Snippet

    SELECT *

    FROM SAIDAS_LINHAS

    WHERE SAIDAS_LINHAS.CodEntrada NOT IN (

      SELECT CodEntrada

      FROM ENTRADAS

    )

     

    ou

     

    SELECT ENTRADAS.*

    FROM ENTRADAS

    LEFT JOIN SAIDAS_LINHAS

    ON ENTRADAS.CodEntrada = SAIDAS_LINHAS.CodEntrada

    WHERE SAIDAS_LINHAS.CodEntrada IS NULL

     

     

     

    Um abraço,

    Raul Santos Neto

    quarta-feira, 28 de janeiro de 2009 17:23

Todas as Respostas

  • Olá Vitor,

     

    Ainda não me veio nada realmente performático, mas tente o seguinte:

     

    Code Snippet

    ;WITH Ausentes AS (
    SELECT     dbo.Mobiliario_Entradas.CodEntrada, 'Ausente' As Tipo
    FROM         dbo.Mobiliario_Entradas
    EXCEPT
    SELECT     dbo.Mobiliario_saidaslinhas.CodEntrada, 'Ausente'
    FROM         dbo.Mobiliario_saidaslinhas),

     

    Presentes AS (
    SELECT     dbo.Mobiliario_Entradas.CodEntrada, 'Presente' As Tipo
    FROM         dbo.Mobiliario_Entradas
    INTERSECT
    SELECT     dbo.Mobiliario_saidaslinhas.CodEntrada, 'Presente'
    FROM         dbo.Mobiliario_saidaslinhas)

     

    SELECT * FROM Ausentes
    UNION ALL
    SELECT * FROM Presentes

     

    [ ]s,

     

    Gustavo Maia Aguiar

    http://gustavomaiaaguiar.spaces.live.com

    quarta-feira, 28 de janeiro de 2009 15:23
  • Então como seria a criação correcta destas tabelas?
    Ando meio lento de pensamento estes dias..
    quarta-feira, 28 de janeiro de 2009 15:32
  • Olá Vitor,

     

    Talvez eu não tenha entendido perfeitamente o que você precisa.

    Você poderia exemplificar ?

     

    [ ]s,

     

    Gustavo Maia Aguiar

    http://gustavomaiaaguiar.spaces.live.com

     

    quarta-feira, 28 de janeiro de 2009 17:08
  • Você disse isto 

     Gustavo Maia Aguiar wrote:

    Olá Vitor,

     

    Ainda não me veio nada realmente performático, mas tente o seguinte:

     


    e eu percebi que as tabelas não estavam bem criadas..

    quarta-feira, 28 de janeiro de 2009 17:10
  • Experimentei a sua sugestão, mas acho que não me expliquei bem..

    Eu preciso saber os dados da tabela Entradas em que o CodEntrada não se encontra na tabela Saidas_Linhas (como mostra no primeiro post)
    quarta-feira, 28 de janeiro de 2009 17:16
  • Oi Vitor,

     

    Mas qual o problema então do primeiro post se ele te atende ? Ele não mostra os dados que estão em entradas e não estão em Saidas_Linhas ?

     

    [ ]s,

     

    Gustavo Maia Aguiar

    http://gustavomaiaaguiar.space.live.com

     

    quarta-feira, 28 de janeiro de 2009 17:20
  • Olá Vitor,

     

    Você não passou maiores informações sobre quantidade de registros ou mesmo quantas vezes esta query será executada, mas dê uma olhada nas duas opções abaixo, para ver se clareia um pouco as tuas idéias.

     

    Code Snippet

    SELECT *

    FROM SAIDAS_LINHAS

    WHERE SAIDAS_LINHAS.CodEntrada NOT IN (

      SELECT CodEntrada

      FROM ENTRADAS

    )

     

    ou

     

    SELECT ENTRADAS.*

    FROM ENTRADAS

    LEFT JOIN SAIDAS_LINHAS

    ON ENTRADAS.CodEntrada = SAIDAS_LINHAS.CodEntrada

    WHERE SAIDAS_LINHAS.CodEntrada IS NULL

     

     

     

    Um abraço,

    Raul Santos Neto

    quarta-feira, 28 de janeiro de 2009 17:23
  • Em principio funcinou a segunda hipotese..
    Obrigado Raul..

    Não terá muitos dados..É uma tabela relativamente pequena..


    quarta-feira, 28 de janeiro de 2009 17:28