如何在一个SQL语句中使用两列

时间:2010-09-30 08:07:07

标签: sql

如何编写此SQL?

Table A Column aa
-----
jack
jim
alan

Table B Column bb
-----
jacky
jimmy
william

输出结果为:

-----
jack jacky
jim jimmy

因为aa的值是bb的子串。

6 个答案:

答案 0 :(得分:26)

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

对于mysql,你需要使用concat('%',field,'%')

对于oracle你需要使用'||' insteaf of'+'

答案 1 :(得分:2)

您可以从子字符串构建模式:

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

答案 2 :(得分: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 + '%'

答案 3 :(得分:0)

您可以这样做:

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

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

答案 4 :(得分:0)

这对我有用:

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

答案 5 :(得分: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