Dúvida SQL [RESOLVIDO]

7 respostas
viniciusfaleiro

Como eu faria a consulta do seguinte caso:

Tenho uma coluna A que não pode ser NULA. Tenho uma coluna B que pode ser NULA.

A tabela T tem n registros de A.

EX:

COL-a | COL-b
123 | null
123 | 25
123 | 13

Como faria uma SQL pra trazer o valor distinto de A somente se NENHUM DOS VALORES DE B FOR NULL… ou seja… se são 3 registros de 123 e um deles é vazio, não traz o 123!!! não to conseguindo! =(

7 Respostas

ctdaa

Tente isso:

SELECT DISTINCT A FROM T
WHERE A NOT IN (SELECT A FROM T WHERE B IS NOT NULL );

pmlm

Se a tabela tiver muitos registos, este pode ser mais eficiente:

SELECT DISTINCT A 
  FROM T t1
 WHERE NOT EXISTS (SELECT 1 FROM T t2 WHERE t1.A = t2.A AND t2.B IS NULL)
gfkauer

Por incrivel que pareça é a forma mais performática…

SELECT DISTINCT A FROM T t1 WHERE t1.A IS NOT NULL

viniciusfaleiro

Pessoal… eu não sei se fui bem claro…

Para esse caso

COL-a | COL-b
123 | null
123 | 25
123 | 13

O resultado deve ser vazio… pois tem um null na coluna B

COL-a | COL-b
123 | null
123 | null
123 | 13

O resultado deve ser vazio… pois tem um null na coluna B

COL-a | COL-b
123 | 12
123 | 45
123 | 13

Resultado deve ser 123… pois nenhuma coluna é nula

viniciusfaleiro

Eu nao consegui testar o do CTDAA pois não rolou no Oracle… o do nosso amigo pmlm não atendeu as expectativas, já que trouxe um resultado mesmo para coluna B com valor null… A do nosso amigo gfkauer (Acredito que não entendeu o objetivo)

pmlm

Testei agora mesmo e funciona na perfeição.

viniciusfaleiro

rapaiz… perdão… substitui a coluna errada aqui… Funciona perfeitamente!!!

Muito Obrigado pela atenção

Criado 19 de janeiro de 2010
Ultima resposta 19 de jan. de 2010
Respostas 7
Participantes 4