Comparação de valores de 2 colunas

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
heraldoaraujo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Dom, 19 Fev 2012 12:10 pm

Turma eu to com o seguinte problema, preciso comparar 2 colunas da mesma tabela e que se elas seja igual retorna as duas, para ilustra vou criar um exemplo:

nome status

scott estudando
scott estudando
scott trabalhando
jimmy estudando
jimmy trabalhando
tommy estudando
tommy aposentado
tommy aposentado

Essas duas colunas não tem nenhuma constraint, mas ela precisar retornar dados que a coluna nome e status seja igual e repitida, então ela deve retornar:

nome status

scott estudando
scott estudando
tommy aposentado
tommy aposentado

Alguém pode me dá uma luz para eu montar uma query que retorne registro dessa forma, por favor?
carloscsilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Qui, 26 Jul 2012 8:55 am
" Pense diferente! - "

Ola!

Esta meio confuso, mas se entendi direito ... é mais ou mesmo isso!?

Selecionar tudo

select nome,
          status
  from tabela
where status in ('estudando','aposentado')
order by nome;
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, blzinha?

Dá uma olhada neste exemplo e, veja se te atende:

Selecionar tudo

with querie1 as (

select 'scott' nome, 'estudando' status
  from dual
union all
select 'scott' nome, 'estudando' status
  from dual
union all
select 'scott' nome, 'trabalhando' status
  from dual
union all
select 'jimmy' nome, 'estudando' status
  from dual
union all
select 'jimmy' nome, 'trabalhando' status
  from dual
union all
select 'tommy' nome, 'estudando' status
  from dual
union all
select 'tommy' nome, 'aposentado' status
  from dual
union all
select 'tommy' nome, 'aposentado' from dual
)
select nome, status
  from querie1
 where (nome, status) in (select nome, status
                            from querie1
                           group by nome, status
                          having count(1) > 1)
order by 1,2 
Essa creio que seja uma das formas.
No teu caso, seria somente utilizar essa parte do código:

Selecionar tudo

select nome, status
  from tua_tabela
 where (nome, status) in (select nome, status
                            from tua_tabela
                           group by nome, status
                          having count(1) > 1)
order by 1,2 
Avatar do usuário
heraldoaraujo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Dom, 19 Fev 2012 12:10 pm

Turma eu fiz com group by e having e tive sucesso gente valeu :mrgreen:
Responder
  • Informação
  • Quem está online

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