2010-09-30 51 views

回答

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

的MySQL,你需要使用CONCAT( '%',场, '%')

您需要使用Oracle '||'的insteaf“+”

+1

SQLite的也使用''||。 – 2013-05-31 16:08:28

+0

||为ORACLE! 它也适用于HQL。 – Deian 2014-02-28 01:21:50

1

你可以尝试像

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

你可以做这样的事情:

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

但是你必须非常小心,因为你可以找到多个行返回相同的名称。

0

这个工作对我来说:

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

为了提高性能, 使用虚拟列(您可以创建索引等)。

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%

更多地了解虚拟列, http://www.dba-oracle.com/oracle11g/oracle_11g_function_based_columns.htm

-Raj