1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[SQL] Comparações com Null

Discussão em 'Programação' iniciada por stradale, 20 de Maio de 2008. (Respostas: 4; Visualizações: 775)

  1. stradale

    stradale [email protected] Member

    Viva o/

    Tenho 2 tabelas:

    Pessoa
    - idPessoa
    - nomePessoa
    - idTipo

    Tipo
    - idTipo
    - nomeTipo

    A 1ª tem:
    1, Manel, 1
    2, Maria, (null)
    3, Joaquim, 2

    E a 2ª:
    1, Professor
    2, Aluno

    O problema está nesta query:
    Select nomePessoa, nomeTipo
    From Pessoa, Tipo
    Where Pessoa.idTipo = Tipo.idTipo
    And Pessoa.idPessoa < 50

    Esta query para a Maria (2) vai dar, claro, falso. E já devem estar a ver o meu problema...

    Um Union sei que funciona (1º faço para os idTipo IS NULL, em seguida para os restantes), mas é mesmo isto que devo utilizar ou há uma maneira melhor? É que essas tabelas são apenas um exemplo... na realidade são 4, e estar a fazer Unions para todos os casos vai resultar numa query de dezenas de linhas :s

    Alterar os dados está fora de questão.
     
    Última edição: 20 de Maio de 2008
  2. theforbidden1

    theforbidden1 Banido

    O problema está em não saberes o que queres, ou não saberes expressar correctamente o que queres
    Código:
    Select nomePessoa, nomeTipo From Pessoa p, Tipo t
    Where [COLOR=Magenta]([/COLOR]p.idTipo = t.idTipo [COLOR=Magenta]or [/COLOR][COLOR=Magenta]p.idTipo is NULL)[/COLOR]
    And p.idPessoa = 'x'
    experimenta lá assim a ver se dá o que tu queres

    E isso de resultar numa query de dezenas de linhas não quer dizer nada, a query andes de ser executada vai primeiro ao code optimizer.

    nota: se criares umas views esses dezenas de linhas podem ser "eliminadas"
     
    Última edição pelo moderador: 21 de Maio de 2008
  3. stradale

    stradale [email protected] Member

    Retorna isto (2 linhas):

    Maria, Professor
    Maria, Aluno

    em vez do pretendido (1 linha):

    Maria, null

    Não posso criar vistas.
     
    Última edição pelo moderador: 21 de Maio de 2008
  4. Karski

    Karski Power Member

    podes usar a função NVL

    NVL(id_tipo, 'valor_default')


    Se o teu problema é juntar as tabelas usas outer joins
     
  5. stradale

    stradale [email protected] Member

    Resolvido com Outer joins!

    NVL também não dá. É uma query para ser utilizada em várias bases de dados, nem todas são Oracle.
     
    Última edição: 20 de Maio de 2008

Partilhar esta Página