#sql #substring #impala
#sql #подстрока #impala
Вопрос:
Итак, если у меня есть две таблицы:
**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
)
Есть идеи?
Комментарии:
1. Вопрос, насколько велики таблицы и какую версию MySQL (
SELECT VERSION()
) вы используете?2. Я удалил несовместимые теги базы данных. Пожалуйста, помечайте только ту базу данных, которую вы действительно используете.
Ответ №1:
Разве это не так просто?
select *
from table_1
inner join table_2 on left(table1.f_name, 4) = right(table_2.id_key, 4);
Комментарии:
1. операция объединения представляется наиболее простым способом удовлетворения спецификации, описанной в вопросе. 10
2. Оператор left не работает. Я использую impala. Будет ли это иметь значение?
3. Извините, я не знаю impala. Мой запрос работает не так, как ожидалось?
Ответ №2:
Мы могли бы использовать операцию объединения и поместить критерии соответствия в 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
Ответ №3:
используйте right
во время вычитания ID_key для 2-й таблицы
select * from
Table_2 where
Where right(ID_key,4) IN (
Select Left(F_name,4) from table_1
)
нет необходимости в агрегировании, которое вы использовали в своем запросе
выходной сигнал
ID_key Group_number
9233443GREG 193556
Ответ №4:
SELECT *
FROM [Table1] AS [t1]
INNER JOIN [Table2] AS [t2]
ON LEFT(t1.[F_Name],4) = RIGHT(t2.[ID_key],4);
Ответ №5:
Вы можете использовать EXISTS:
select * from Table_2 t2
where exists (
select 1 from Table_1
where left(F_name, 4) = right(t2.ID_Key, 4)
)