none
Sub Consultas RRS feed

  • Pergunta

  • Boa noite galera.

    Existe a possibilidade de fazer sub consulta com IF?

    Exemplo:

    tabela 01, tabela 02 e tabela 03.

    Na tabela 01 pego um resultado (tipo Nome).  Consulto na tabela 02 se tem esse nome nela, caso não tenha eu verifico se tem na tabela 03, daí mostro o resultado:  Nome + resultado da tabela 02 ou 03.

    Tem como fazer dessa forma?  Se tiver, como posso fazer?

    Desde já agradeço.

    Perrot

    quarta-feira, 18 de abril de 2012 21:47

Respostas

  • Exemplo:

    Select
      NomeCompleto = Case
                       When (T2.Nome is not Null) Then
                         T1.Nome + T2.SobreNome
                       When (T3.Nome is not Null) Then
                         T1.Nome + T3.SobreNome
                       Else
                         T1.Nome
    From
      Tabela1 T1 Left Join Tabela2 T2 on (T2.Nome = T1.Nome)
                 Left Join Tabela3 T3 on (T3.Nome = T1.Nome)

    Este exemplo concatena o nome que está na tabela 1 com o sobrenome que está na 2, caso exista. Quando não existir na tabela 2, concatena com o sobrenome que está na tabela 3, caso exista. E se também não existir, o "nome completo" será somente o "nome" que está na tabela 1.

    Observação: a ligação entre as tabelas está sendo feita pelo campo nome somente para entendimento. Normalmente existe algum outro campo mais próprio para fazer isso.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Perrot quinta-feira, 19 de abril de 2012 14:19
    quinta-feira, 19 de abril de 2012 01:19
    Moderador

Todas as Respostas

  • Boa noite,

    Sinceramente não sei se a segunda consulta deixará de ser realizada se a primeira encontrar, mas acredito que da forma abaixo seria obtido o resultado desejado:

    select
        t1.Nome,
        COASLESCE
        ( (select Nome from Tabela2 as t2 where t2.Nome = t1.Nome),
          (select Nome from Tabela3 as t3 where t3.Nome = t1.Nome) )
    from Tabela1 as t1
    

    Espero que seja útil.


    Assinatura: Imobiliarias em Suzano

    quinta-feira, 19 de abril de 2012 00:22
  • Sua situação será resolvida com um Left Join da Tabela1 em relação às tabelas 2 e 3.

    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quinta-feira, 19 de abril de 2012 00:23
    Moderador
  • Exemplo:

    Select
      NomeCompleto = Case
                       When (T2.Nome is not Null) Then
                         T1.Nome + T2.SobreNome
                       When (T3.Nome is not Null) Then
                         T1.Nome + T3.SobreNome
                       Else
                         T1.Nome
    From
      Tabela1 T1 Left Join Tabela2 T2 on (T2.Nome = T1.Nome)
                 Left Join Tabela3 T3 on (T3.Nome = T1.Nome)

    Este exemplo concatena o nome que está na tabela 1 com o sobrenome que está na 2, caso exista. Quando não existir na tabela 2, concatena com o sobrenome que está na tabela 3, caso exista. E se também não existir, o "nome completo" será somente o "nome" que está na tabela 1.

    Observação: a ligação entre as tabelas está sendo feita pelo campo nome somente para entendimento. Normalmente existe algum outro campo mais próprio para fazer isso.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Perrot quinta-feira, 19 de abril de 2012 14:19
    quinta-feira, 19 de abril de 2012 01:19
    Moderador