Таблица соединения SQL на неполной строке - PullRequest
0 голосов
/ 20 марта 2019

У меня есть две таблицы в базе данных Postgres:

Таблица A:

**Middle_name**
John
Joe
Fred
Jim Bob
Paul-John

Таблица B:

**Full_name**
Fred, Joe, Bobda
Jason, Fred, Anderson
Tom, John, Jefferson
Jackson, Jim Bob, Sager
Michael, Paul-John, Jensen

Иногда второе имя пишется через дефис или между ним пробел. Но в отчестве никогда не бывает запятой. Если это дефис или два отчества, записи будут одинаковыми как в таблице A, так и в таблице B.

Я хочу присоединиться к таблицам Middle_name и Full_name. Сложность в том, что объединение должно проверять только значения между запятыми в Full_name. В противном случае оно может случайно совпадать с именем.

Я использовал приведенный ниже запрос, но я только что понял, что ничто не мешает ему случайно сопоставить второе имя с именем.

SELECT Full_name, Middle_name
FROM B
JOIN A
ON POSITION(Middle_name IN Full_name)>0

Мне интересно, как я могу реорганизовать этот запрос, чтобы он соответствовал только второму имени (при условии, что все они отображаются в одном формате).

Ответы [ 2 ]

1 голос
/ 20 марта 2019

используйте split_part ('Fred, Joe, Bobda', ',', 2), который возвращает отчество joe

SELECT Full_name, Middle_name
FROM B
JOIN A
ON split_part(B.Full_name, ',', 2)=A.Middle_name

демо для возвращения отчества

0 голосов
/ 20 марта 2019

Если есть всегда ровно через один пробел после запятой, и каждый имеет отчество, как показывают ваши примерные данные, пробел может быть просто частью разделителя в split_part ()

SELECT full_name, middle_name
FROM   A
JOIN   B ON split_part(B.full_name, ', ', 2) = A.middle_name;

Связанный:

...