Как понравиться два столбца в одном выражении SQL

Как написать этот SQL?

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

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

Вывод:

-----
jack jacky
jim jimmy

Поскольку значение aa является подстрокой bb.

Ответ 1

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

для mysql вам нужно использовать concat ('%', field, '%')

для оракула вам нужно использовать '||' insteaf '+'

Ответ 2

Вы можете построить шаблон из подстроки:

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

Ответ 3

Вы можете попробовать что-то вроде

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 + '%'

Ответ 4

Вы можете сделать что-то вроде этого:

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

Но вы должны быть очень осторожны, потому что вы можете найти несколько строк, возвращенных для одного и того же имени.

Ответ 5

Это работает для меня:

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

Ответ 6

Чтобы повысить производительность, Используйте виртуальный столбец (вы можете создать индекс и т.д.).

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