none
retorno uma linha se existir uma linha RRS feed

  • Pergunta

  • Boa noite,

    preciso fazer um select que me retorne somente uma linha.. ou seja.. não estou falando de top 1

    preciso retornar um registro se ele existir somente uma vez na tabela.

    ou seja.. se o registro A para o codigo B existe uma vez retorna.


    é tipo se o count for igual a 1 retorna a linha.. mas nao sei se existe count() = 1...
    • Editado Hawk B quarta-feira, 5 de março de 2014 23:19
    quarta-feira, 5 de março de 2014 23:04

Respostas

  • Acho que pode ser assim:

    select a.* 
    from TabelaA a with (nolock) 
       inner join (select count(*) as qtde, numero from Tabela_B with(nolock) group by numero having count(*) = 1) b on a.numero = b.numero


    quinta-feira, 6 de março de 2014 13:15
  • Hawk B

    Tente essa abordagem fazendo uso de uma CTE:

    CREATE TABLE #TabelaA (id int, numero varchar(5), auxiliar varchar(10));
    CREATE TABLE #TabelaB (id int, numero varchar(5), auxiliar varchar(10));
    
    INSERT INTO #TabelaA VALUES (1,'12345','TESTE'),(2,'6789','TESTE2'),(3,'74128','TESTE3')
    INSERT INTO #Tabelab VALUES (1,'12345','BLA'),(2,'6789','TESTE3'),(3,'6789','TESTE4')
    
    ;WITH cte_tmp AS 
    (
      SELECT Numero, count(*) AS 'qtd'
      FROM #TabelaB
      GROUP BY Numero
      HAVING count(*) = 1
    )
    SELECT * FROM #TabelaA tbA
    JOIN cte_tmp CTE
    ON tbA.Numero = CTE.Numero
    
    
    DROP TABLE #TabelaA
    DROP TABLE #TabelaB

    Espero que te ajude.

    []'s!


    /* Logan Destefani Merazzi - http://www.merazzi.eti.br Se a resposta for útil, por favor, não esqueça de marcá-la como resposta. */

    • Marcado como Resposta Giovani Cr terça-feira, 11 de março de 2014 12:25
    quinta-feira, 6 de março de 2014 13:27
  • o quer dizer esse nolock?

    No nolock é para não "travar"/"bloquear" a tabela no momento da consulta.

    http://blogs.msdn.com/b/fcatae/archive/2010/10/05/como-usar-select-with-nolock-para-melhorar-a-performance.aspx

    []´s


    quinta-feira, 6 de março de 2014 20:49
  • Boa Tarde Hawk B,

    Alguma novidade?

    Att,


    Giovani Cruzara – Microsoft Contingent Staff

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    Msdn Community Support

    Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta Giovani Cr terça-feira, 11 de março de 2014 12:25
    segunda-feira, 10 de março de 2014 18:36

Todas as Respostas

  • Deleted
    quarta-feira, 5 de março de 2014 23:31
  • nao funcionou...

    é assim

    select codigoA

    where codigo = 2

    e esse codigoA que é igual a clausula codigo = 2 pode aparecer varias vezes mas quero que me retorne somente o codigoA que aparece uma vez

    quinta-feira, 6 de março de 2014 00:01
  • Deleted
    quinta-feira, 6 de março de 2014 07:18
  • Tabela A Tabela B
    id numero auxiliar id numero auxiliar
    1 123456 teste 546 123456 teste
    2 456789 testeb
    3 741258 testec

    preciso de um select na tabela A onde o campo numero exista somente uma vez e não mais que isso na tabela B

    resultado do select:

    id numero auxiliar
    546 123456 teste

    quinta-feira, 6 de março de 2014 11:15
  • Acho que pode ser assim:

    select a.* 
    from TabelaA a with (nolock) 
       inner join (select count(*) as qtde, numero from Tabela_B with(nolock) group by numero having count(*) = 1) b on a.numero = b.numero


    quinta-feira, 6 de março de 2014 13:15
  • Hawk B

    Tente essa abordagem fazendo uso de uma CTE:

    CREATE TABLE #TabelaA (id int, numero varchar(5), auxiliar varchar(10));
    CREATE TABLE #TabelaB (id int, numero varchar(5), auxiliar varchar(10));
    
    INSERT INTO #TabelaA VALUES (1,'12345','TESTE'),(2,'6789','TESTE2'),(3,'74128','TESTE3')
    INSERT INTO #Tabelab VALUES (1,'12345','BLA'),(2,'6789','TESTE3'),(3,'6789','TESTE4')
    
    ;WITH cte_tmp AS 
    (
      SELECT Numero, count(*) AS 'qtd'
      FROM #TabelaB
      GROUP BY Numero
      HAVING count(*) = 1
    )
    SELECT * FROM #TabelaA tbA
    JOIN cte_tmp CTE
    ON tbA.Numero = CTE.Numero
    
    
    DROP TABLE #TabelaA
    DROP TABLE #TabelaB

    Espero que te ajude.

    []'s!


    /* Logan Destefani Merazzi - http://www.merazzi.eti.br Se a resposta for útil, por favor, não esqueça de marcá-la como resposta. */

    • Marcado como Resposta Giovani Cr terça-feira, 11 de março de 2014 12:25
    quinta-feira, 6 de março de 2014 13:27
  • o quer dizer esse nolock?
    quinta-feira, 6 de março de 2014 18:53
  • o quer dizer esse nolock?

    No nolock é para não "travar"/"bloquear" a tabela no momento da consulta.

    http://blogs.msdn.com/b/fcatae/archive/2010/10/05/como-usar-select-with-nolock-para-melhorar-a-performance.aspx

    []´s


    quinta-feira, 6 de março de 2014 20:49
  • obrigado... tenho que testar

    quinta-feira, 6 de março de 2014 21:57
  • Boa Tarde Hawk B,

    Alguma novidade?

    Att,


    Giovani Cruzara – Microsoft Contingent Staff

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    Msdn Community Support

    Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta Giovani Cr terça-feira, 11 de março de 2014 12:25
    segunda-feira, 10 de março de 2014 18:36