OPERADORES LOGICOS

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Avatar do usuário
p43lo
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 26
Registrado em: Qua, 14 Jul 2010 11:35 am
Localização: vitoria es
T.I

Bom dia!.

Problema na sintaxe da query, onde o resultado a se obter desejado é que o tp_resultado seja 'R' and 'S' sendo que
obrigatoriamente resulte itens que tenha ambos os filtros.
Ex.:
Tb_itens
codigo ----item----tp_resultado
1------------x------- R
2------------y-------- S
3------------x-------- S
4------------z--------R

Selecionar tudo

select * from tb_itens
where tp_resultado = 'R' and tp_resultado = 'S'
Resultado esperado seria item X pois em seu tp_resultado obrigatoriamente tem S and R, porem não me trouxe nada. Como corrigir essa sintaxe?

At.
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Olá p43lo,

Uma coluna não pode armazenar ao mesmo tempo dois valores diferentes.

Acho que você resolveria sua querie com um operador lógico "OR" (se o elemento apresentar um dos valores X/Y). Ou então usando um CASE e COUNT(*) para identificar os registros que apresentassem X e Y.

Abraços,

Sergio Coutinho
Avatar do usuário
p43lo
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 26
Registrado em: Qua, 14 Jul 2010 11:35 am
Localização: vitoria es
T.I

Bom dia stcoutinho,

A questão dos valores tp_resultado para os itens não foi bem esclarecida.
Não estou tentando armazenar dois valores em uma mesma coluna, temos uma tabela que recebe como estrangeira o código do item e atribuímos o tipo de resultado por esse motivos temos R e S para o mesmo item gerando registros em sua tabela.

*Não poderia usar o OR pois obrigatoriamente tenho que trazer os itens que tenham ambos os filtros.
*Não poderia usar o IN pois tenho que trazer o tipo R e S e não um ou outro.

Selecionar tudo

select   cd_ped_lab, itcultura.cd_antimicrob,decode (itcultura.tp_resultado
   ,'N', 'não testado'
   , 'R' , 'Resistente'
   , 'M' , 'Intermediario'
   , 'S' , 'Sensivel'
   , 'P' , 'Positivo'
   , 'G' , 'Negativo'
   , 'E' , 'Sinergismo Sensivel'
   , 'I' , 'Sinergismo Resistente'
   , 'A' , 'Betalactamas')tp_resultado
   from itcultura 
   -- where  tp_resultado = 'S' and tp_resultado = 'N'   ---esse é a sintaxe  
   order by cd_antimicrob

Selecionar tudo

Cdogio     cd_antimicrob  	tp_resultado
1        	261           	Resistente
2        	261           	Sensivel
3        	224           	Sensivel
4        	226           	Sensivel
5        	213           	Resistente
6        	300           	Sensivel
7        	224           	Resistente
Gostaria que troxesse somente 261 e 224 que tem o resultado R e S os demas não pois teriam R ou S.


At.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Tenta com EXISTS:

Selecionar tudo

SELECT distinct  cd_antimicrob
FROM SUATABELA y
WHERE EXISTS (select 1 from suatabela X 
              where x.cd_antimicrob = y.cd_antimicrob 
                AND x.tp_resultado="R")
                
  AND EXISTS (select 1 from suatabela X 
              where x.cd_antimicrob = y.cd_antimicrob 
                AND x.tp_resultado="S")
                 
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 12 visitantes