2016-10-18 2 views
0

У меня есть две таблицы:SQL Server: присоединиться на двух колонках с использованием подстроку

Таблица A:

colA 
---- 
NY 
CA 
NJ 
AZ 
USA 

Таблица B:

colB 
----- 
CA 
AZ 
USA - LA 
USA - NC 
USA 

Я хочу присоединиться к COLA к colB и произвести следующие результаты:

CA 
AZ 
USA 
USA 
USA 

Я думаю о соединении двух столбцов с использованием подстроки, но как вы учитываете 2-буквенные значения (CA, AZ ...) при совпадении «США», которое составляет более 2 букв.

Я не смог найти ответы на существующие сообщения. Не стесняйтесь перенаправлять. Также не стесняйтесь изменять название.

+1

Что-то вроде этого будет делать соединение, хотя производительность, вероятно, пострадает. 'from tablea inner join tableb на tablea.cola = left (tableb3colb, 3)'. Если в 'colb' всего 2 символа, то возвращается только 2, если их число равно 3 или более. – Igor

ответ

0

Попробуйте

DECLARE @T1 TABLE(data VARCHAR(10)) 
INSERT INTO @T1 VALUES('NY'),('CA'),('NJ'),('AZ'),('USA') 

DECLARE @T2 TABLE(data VARCHAR(10)) 
INSERT INTO @T2 VALUES('CA'),('AZ'),('USA - LA '),('USA - NC'),('USA') 

SELECT t1.* 
FROM @T1 t1 
INNER JOIN @T2 t2 ON t1.data = LEFT(t2.data,LEN(t1.data)) 
0

Вы можете как ниже:

SELECT 
    A.colA 
FROM 
    TableA A INNER JOIN 
    TableB B ON '-' + REPLACE(B.data, ' ', '') + '-' LIKE '%-' + A.colA + '-%' 
0

Это сделает объединение, хотя производительность может пострадать. Если в colb есть только 2 символа, возвращается только 2, если они возвращены 3 или более.

-- stage test data 
DECLARE @tablea AS table(cola VARCHAR(3)) 
DECLARE @tableb AS table(colb VARCHAR(8)) 

INSERT INTO @tablea (cola) VALUES ('NY'),('CA') ,('NJ') ,('AZ') ,('USA') 
INSERT INTO @tableb (colb) VALUES ('CA') ,('AZ') ,('USA - LA') ,('USA - NC') ,('USA') 

-- Query 
SELECT cola 
FROM @tablea 
INNER JOIN @tableb ON cola = LEFT(colb,3) 
Смежные вопросы