2010-09-30 15 views

Respuesta

20
Select aa, bb 
from a, b 
where a.aa like '%' + b.bb + '%' 
    OR b.bb like '%' + a.aa + '%' 

para MySQL necesita utilizar concat ('%', campo, '%')

para Oracle necesita utilizar '||' insteaf de '+'

+1

SQLite también utiliza '' ||. –

+0

|| para ORACLE! Funciona también para HQL. – Deian

1

Puede intentar algo así como

DECLARE @TableA TABLE(
     AA VARCHAR(20) 
) 
INSERT INTO @TableA SELECT 'jack' 
INSERT INTO @TableA SELECT 'jim' 
INSERT INTO @TableA SELECT 'alan' 

DECLARE @TableB TABLE(
     BB VARCHAR(20) 
) 
INSERT INTO @TableB SELECT 'jacky' 
INSERT INTO @TableB SELECT 'jimmy' 
INSERT INTO @TableB SELECT 'william' 

SELECT * 
FROM @TableA A, 
     @TableB B 
WHERE B.BB LIKE '%' + A.AA + '%' 
2

Es posible construir un modelo de la subcadena:

select a.aa, b.bb 
from TableA a 
inner join TableB b on b.bb like '%' + a.aa + '%' 
0

se puede hacer algo como esto:

SELECT 
     a.aa, b.bb 
FROM 
     a 
JOIN 
     b ON b.bb like '%' + a.aa + '%' 

Pero hay que tener mucho cuidado porque se puede encontrar múltiples filas devueltas para el mismo nombre.

0

Esto funciona para mí:

SELECT 
     a.aa, b.bb 
FROM 
     a 
JOIN 
     b ON b.bb like '%' || a.aa || '%' 
0

para mejorar el rendimiento, Uso columna virtual (se puede crear el índice, etc.).

create table text2(
x number(10), 
x1 as ('%'||x||'%')) 

insert into text2 (x) values ('100') 
insert into text2 (x) values ('33') 
commit 

select * from text2 

create table text1 
(x number(10)); 

insert into text1 values (100); 
insert into text1 values (1001); 
insert into text1 values (3300); 

commit; 

select text1.x, text2.x1 from text1 , text2 
where text1.x like text2.x1 

X X1 33% 33% 100% 100%

saber más acerca de la columna virtual, http://www.dba-oracle.com/oracle11g/oracle_11g_function_based_columns.htm

-Raj

Cuestiones relacionadas