Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 гибкий джоин по строке.  [new]
sub zero -275
Guest
;with 
t0 as
(
	select 'Иванов' as [фамилия], 'Иван' as [имя], 'Иванович' as [отчество] union all
	select 'Сидоров' as [фамилия], 'Сидор' as [имя], 'Сидорович' as [отчество] union all
	select 'Петров' as [фамилия], 'Петр' as [имя], 'Петрович' as [отчество]
),
t1 as
(
	select 'Иванович' as [part1], 'Иванов' as [part2], 'Иван' as [part3], 'HG-8UVA' as id union all
	select 'Сидоров' as [part1],'Сидорович' as [part3], 'CM-11BV50A' as id union all
	select 'Петров' as [part1], 'Петр' as [part2], 'ER-4575NND' as id 
)
/*

	Нужно к таблице t0 приджойнить id-ки из t1

	Как бы сделать красивее, кроме как перебором через OR предикатов в join.
	В таблице t1 перемешаны компоненты ФИО и не всегда есть имя и/или отчество.

*/
10 фев 15, 11:57    [17243484]     Ответить | Цитировать Сообщить модератору
 Re: гибкий джоин по строке.  [new]
Daba
Member

Откуда:
Сообщений: 132
Не понятно что является ключом? Фамилия (которая не уникальна)?
10 фев 15, 12:04    [17243539]     Ответить | Цитировать Сообщить модератору
 Re: гибкий джоин по строке.  [new]
Glory
Member

Откуда:
Сообщений: 104751
sub zero -275
В таблице t1 перемешаны компоненты ФИО

Если Иванович может быть и фамилией и отчеством, то как сравнивать то ?
10 фев 15, 12:07    [17243565]     Ответить | Цитировать Сообщить модератору
 Re: гибкий джоин по строке.  [new]
sub zero -275
Guest
Glory
sub zero -275
В таблице t1 перемешаны компоненты ФИО

Если Иванович может быть и фамилией и отчеством, то как сравнивать то ?


Считаем что фамилия известна всегда и точно будет среди трех колонок part1, part2, part3. Имя и отчество не всегда. Надо поджойнить хотя бы приблизительно. Чем больше совпало - тем больше вероятность правильности. Задача разовая "данных" много. Хочу сократить ручной труд.
10 фев 15, 12:16    [17243631]     Ответить | Цитировать Сообщить модератору
 Re: гибкий джоин по строке.  [new]
Добрый Э - Эх
Guest
sub zero -275,

А чем через OR не устроило? Тем боее, раз вещь - разовая. Чего уж тут о красоте суетиться?
10 фев 15, 12:18    [17243644]     Ответить | Цитировать Сообщить модератору
 Re: гибкий джоин по строке.  [new]
Glory
Member

Откуда:
Сообщений: 104751
sub zero -275
Считаем что фамилия известна всегда

Что в t1 есть Фамилия, если по вашим словам "В таблице t1 перемешаны компоненты ФИО" ?
10 фев 15, 12:19    [17243648]     Ответить | Цитировать Сообщить модератору
 Re: гибкий джоин по строке.  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
;with 
t0 as
(
	select 'Иванов' as [фамилия], 'Иван' as [имя], 'Иванович' as [отчество] union all
	select 'Сидоров' as [фамилия], 'Сидор' as [имя], 'Сидорович' as [отчество] union all
	select 'Петров' as [фамилия], 'Петр' as [имя], 'Петрович' as [отчество]
),
t1 as
(
	select 'Иванович' as [part1], 'Иванов' as [part2], 'Иван' as [part3], 'HG-8UVA' as id union all
	select 'Сидоров' as [part1],null as [part2],'Сидорович' as [part3], 'CM-11BV50A' as id union all
	select 'Петров' as [part1], 'Петр' as [part2],null as [part3], 'ER-4575NND' as id 
)
select t0.*,t1.id 
from t0 
join t1 on 
    (t1.[part1] is null OR t1.[part1] in (t0.[фамилия],t0.[имя],t0.[отчество]))
and (t1.[part2] is null OR t1.[part2] in (t0.[фамилия],t0.[имя],t0.[отчество]))
and (t1.[part3] is null OR t1.[part3] in (t0.[фамилия],t0.[имя],t0.[отчество]))
10 фев 15, 12:20    [17243660]     Ответить | Цитировать Сообщить модератору
 Re: гибкий джоин по строке.  [new]
Иванов-Сидоров
Guest
sub zero -275,

больше похоже на outer apply с top 1, в order by сортировка по суррогатной цифре "максимальная вероятность совпадения"
10 фев 15, 16:07    [17245262]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить