Sequencial fora da tabela

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
adrianatoscano
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Qua, 10 Set 2008 4:08 pm
Localização: Natal/RN

Olá colegas! Preciso saber como gerar um select que retorne os sequenciais que estão fora de uma tabela. Exemplo:

Selecionar tudo

CD_ALUNO   NM_ALUNO
1          ANA
2          JOSE
3          PEDRO
5          CARLOS
8          MARIA
O comando deve retornar exatamente os sequenciais do campo CD_ALUNO que não existem, ou seja: 4,6,7

Alguém pode me ajudar??
God bless you!!
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

Tem muitas formas de fazer isso.
Uma delas é usando MINUS

Selecionar tudo

SQL> select * from tabela;

    NUMERO
----------
         1
         2
         3
         5
         8

SQL> 
SQL> select rownum from all_objects where rownum <= 10
  2  minus
  3  select numero from tabela
  4  /

    ROWNUM
----------
         4
         6
         7
         9
        10

SQL> 
adrianatoscano
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Qua, 10 Set 2008 4:08 pm
Localização: Natal/RN

Valeu!!! Deu certíssimo! Muito grata!
adrianatoscano
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Qua, 10 Set 2008 4:08 pm
Localização: Natal/RN

Executei o seguinte comando:

Selecionar tudo

select rownum from all_objects where rownum <= 850000 minus
select cd_paciente from paciente
Porém preciso determinar que sejam exibidos apenas A PARTIR do sequencial 500000 do campo CD_PACIENTE.
Qual comando devo usar?
Alguém pode me ajudar?
rogenaro
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR
Rafael O. Genaro

Selecionar tudo

select * from
(
  select rownum cd_paciente from all_objects where rownum <= 850000 
  minus 
  select cd_paciente from paciente 
) 
where cd_paciente >= 500000
ou ainda

Selecionar tudo

select rownum + 499999 cd_paciente from all_objects where rownum <= 850000
minus 
select cd_paciente from paciente 
Uma outra forma de gerar as seqüências para comparação é por meio do connect by (na versão 9 ou superior):

Selecionar tudo

select level + 499999 cd_paciente from dual connect by level <= 850000
Responder
  • Informação
  • Quem está online

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