#sql #snowflake-cloud-data-platform
Вопрос:
У меня есть две таблицы, как показано ниже:
Я хотел бы сопоставить эти два столбца, т. е. ИМЯ ПОЛЬЗОВАТЕЛЯ из таблицы 1, с ИМЕНЕМ ПОЛЬЗОВАТЕЛЯ из таблицы 2.
Я попытался с помощью приведенного ниже запроса, но смог сопоставить только Ричарда, а не Кристин.
SELECT * FROM
table1 A
JOIN
table2 B
ON
LEFT(upper(A.FIRST_NAME)||' ', CHARINDEX(' ', upper(A.FIRST_NAME)) - 1)=
LEFT(upper(B.FIRSTNAME)||' ', CHARINDEX(' ', upper(B.FIRSTNAME)) - 1)
Пожалуйста, предложите!
Комментарии:
1. Что на самом деле возвращают ваши левые… расчеты? Split_Part может быть чище/проще —
splitpart(a.first_name,' ',0)
.2. @Andrew: splitpart работал на меня .. На самом деле это была разделенная часть в снежинке. Большое спасибо!
3. существует общее правило: никогда не использовать SQL в функции, где это, и это, где, таким образом, зависеть от размера вашей таблицы, и насколько сложным вы присоединяетесь к логике получается, что это может быть чище, чтобы подтолкнуть превращается в КТР (или подзапрос), где вы строите
clean_name
из обеих таблиц, а затем хэш-соединения между теми, кто будет чище.
Ответ №1:
Я бы добавил обрезку, чтобы убедиться, что нет пробелов, препятствующих совпадению.
select * from A join B on
upper(trim(split(A.FIRST_NAME, ' ')[0]::string)) = upper(trim(split(B.FIRST_NAME, ' ')[0]::string))