Like com linhas de outra tabela

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
vrbrant
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Ter, 04 Set 2012 2:27 pm

Estou com uma dúvida.

Tenho duas tabelas:

------
Tab1
NomeAbrev
------
Tab2
NomeCompleto
Idade
------

Tab1
[Ab
Bc
De
o a]
------
Tab2
[Abacate, 22
Aibcs, 10
Cade, 50
Joao, 30
Maria, 40
Abgail, 60
Paulo andre, 100
Carlos, 33]

--------

Como faço para ter o seguinte resultado:
Abacate, 22
Aibcs, 10
Cade, 50
Abgail, 60
Paulo andre, 100

Pensei em algo como:
Select NomeCompleto, Idade from Tab2, Tab1 where NomeCompleto like NomeAbrev;
ou então:
Select NomeCompleto, Idade from Tab2, Tab1 where instr(NomeCompleto, NomeAbrev);

Mas não funciona.

Alguma sugestão?
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á Vrbrant,

Você está quase chegando lá. Seria interessante combinar a instrução INSTR com UPPER neste caso.

Faça este teste:

Selecionar tudo

SQL> CREATE TABLE TBL_ABREV (NO_ABREV VARCHAR2(5));
Tabela criada.

CREATE TABLE TBL_COMPLET (NO_COMPLET VARCHAR2(15),NU_IDADE NUMBER(3));

INSERT INTO TBL_ABREV VALUES ('Ab');
INSERT INTO TBL_ABREV VALUES ('Bc');
INSERT INTO TBL_ABREV VALUES ('De');
INSERT INTO TBL_ABREV VALUES ('o a');
COMMIT;

INSERT INTO TBL_COMPLET VALUES ('Abacate', 22);
INSERT INTO TBL_COMPLET VALUES ('Aibcs', 10);
INSERT INTO TBL_COMPLET VALUES ('Cade', 50);
INSERT INTO TBL_COMPLET VALUES ('Joao', 30);
INSERT INTO TBL_COMPLET VALUES ('Maria', 40);
INSERT INTO TBL_COMPLET VALUES ('Abgail', 60);
INSERT INTO TBL_COMPLET VALUES ('Paulo andre', 100);
INSERT INTO TBL_COMPLET VALUES ('Carlos', 33);
COMMIT;

SELECT A.NO_ABREV,C.NO_COMPLET,C.NU_IDADE 
FROM TBL_ABREV A,TBL_COMPLET C 
WHERE INSTR(UPPER(C.NO_COMPLET),UPPER(A.NO_ABREV)) <> 0;
O resultado do SELECT acima deve dar um resultado parecido com este

Selecionar tudo

NO_AB NO_COMPLET        NU_IDADE
----- --------------- ----------
Ab    Abacate                 22
Ab    Abgail                  60
Bc    Aibcs                   10
De    Cade                    50
o a   Paulo andre            100
Mesmo assim, esta situação só funcionará se não existirem caracteres acentuados nas tabelas.

Se for necessário você inserir caracteres e fazer com que ORACLE ignore os acentos, você pode adicionar na sua condição de WHERE o comando REPLACE, para remover eventuais acentos nas comparações (ex: REPLACE('á','a') = 'a').

Se tiver outras dúvidas, fique à vontade para postar aqui.

Abraços,

Sergio Coutinho
vrbrant
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Ter, 04 Set 2012 2:27 pm

Oi STCOUTINHO,

Perfeito! :D
Funcionou, realmente o UPPER estava dando diferença no meu resultado. E também o final da query "<> 0".

Para quem não sabe como funciona o INSTR, aqui tem uma boa explicação: http://www.dartanghan.com.br/oracle-instr-function/.
Mas de forma geral, o INSTR retorna a posição de uma substring numa string. :idea:

Obrigado!
Responder
  • Informação
  • Quem está online

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