2010-09-30 20 views

cevap

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

gibi bir şey deneyebilirsiniz '||' arasında insteaf '+'

Sen alt dize gelen bir desen oluşturabilirsiniz
+1

SQLite da 'kullanır ||'. –

+0

|| ORACLE için! HQL için de çalışıyor. – Deian

1

Sen kullandığınız ihtiyaç oracle için concat ('%', alan, '%')

kullanmak gerek mysql için

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

:

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

Böyle bir şey yapabilirsiniz:

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

Ama bulabilirsiniz çünkü çok dikkatli olmak zorunda Aynı ad için birden fazla satır döndü.

0

Bu benim için çalışıyor:

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

performansını artırmak için, Kullanım Sanal sütununda (index vb oluşturabilirsiniz).

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

sanal sütun hakkında daha fazla bilgi için,% 100, http://www.dba-oracle.com/oracle11g/oracle_11g_function_based_columns.htm

-Raj

İlgili konular