Совпадение последних для букв строки с первыми четырьмя буквами другого (SQL Pattern Matching) - PullRequest
0 голосов
/ 13 марта 2019

Итак, если у меня есть две таблицы:

**Table_1:**

F_name |L_Name

GREGORY| WASHINGTON


**Table_2:**

 ID_Key | Group_number

 9233443GREG| 193556

Я хочу сопоставить последнюю цифру ID_Key таблицы 2 (GREG) с f_name таблицы 1 (GREGORY).

Итак, я хочу, чтобы выходные данные отображали все совпадения между последними 4 цифрами ID_Key и первыми четырьмя цифрами F_name.

Вот что я пробовал, но безрезультатно:

select * from 
Table_2 where
Where LEFT(ID_key,4) IN (
Select Left(F_name,4) from table_1
Group By LEFT (ID_KEY,4)
Having Count(*) > 1 
)

Есть идеи?

Ответы [ 5 ]

2 голосов
/ 13 марта 2019

Разве это не просто?

select *
from table_1
    inner join table_2 on left(table1.f_name, 4) = right(table_2.id_key, 4);
0 голосов
/ 14 марта 2019

Вы можете использовать EXISTS:

select * from Table_2 t2
where exists (
  select 1 from Table_1 
  where left(F_name, 4) = right(t2.ID_Key, 4)
)
0 голосов
/ 13 марта 2019

Мы могли бы использовать операцию соединения и поместить критерии соответствия в предложение ON примерно так:

SELECT r.id_key
     , r.group_number
     , n.f_name
     , n.l_name
  FROM `Table_1` n
  JOIN `Table_2` r
    ON RIGHT(TRIM(r.id_key),4) = LEFT(n.f_name,4)
 ORDER
    BY r.id_key
     , r.group_number
     , n.f_name
0 голосов
/ 13 марта 2019
SELECT *
FROM [Table1] AS [t1]
INNER JOIN [Table2] AS [t2]
    ON LEFT(t1.[F_Name],4) = RIGHT(t2.[ID_key],4);
0 голосов
/ 13 марта 2019

используйте right во время подстроки ID_key для 2-й таблицы

select * from 
Table_2 where
Where right(ID_key,4) IN (
Select Left(F_name,4) from table_1

)

нет необходимости в агрегировании, которое вы использовали в своем запросе

output

ID_key        Group_number
 9233443GREG    193556

демо

...