Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Эффективный поиск строк c игнорированием leading zeroes  [new]
KellyLynch
Member

Откуда:
Сообщений: 87
У меня есть Sql Server 2008R2. В нём 2 таблицы:

CREATE TABLE [SmallerTable](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[Name] [varchar](50) NULL,
CONSTRAINT [SmallerTable.PK] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


и

CREATE TABLE [LargerTable](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[Name] [varchar](50) NULL,
 CONSTRAINT [LargerTable.PK] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]



В [SmallerTable] у меня 600,000 строк
В [LargerTable] у меня 7,000,000 строк. [SmallerTable] и [LargerTable] проиндексированы и по полю [Name].

Мне надо написать скрипт который поищет строки из [SmallerTable].[Name] среди строк [LargerTable].[Name]. То есть выдаст нечто вроде такого:

CREATE TABLE [MatchedRows](
	[SmallerTableID] [int] NOT NULL,
	[LargerTableID] [int] NOT NULL
) 


где каждая строка таблицы говорит: "значение Name из строки [SmallerTable] с ключом [SmallerTableID] равно значению Name из строки [LargerTable] с ключом [LargerTableID]"

И - главное - поиск должен игнорировать начальные нули (если они есть) как в [SmallerTable].Name, так и в [LargerTable].Name.
То есть такик вот пары значений должны считаться "равными":

SmallerTable: 11 LargerTable: 011
SmallerTable: 011 LargerTable: 11
SmallerTable: 011 LargerTable: 0011
SmallerTable: 0011 LargerTable: 011


Что может облегчить мне задачу - я увидел что в [SmallerTable] все значения Name по реальной длине не превышают 7 символов.

Как сделать так чтобы этот скрипт работал быстро?
13 сен 15, 16:20    [18144006]     Ответить | Цитировать Сообщить модератору
 Re: Эффективный поиск строк c игнорированием leading zeroes  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37067
KellyLynch
Как сделать так чтобы этот скрипт работал быстро?
Завести в каждой таблице поле, в котором хранить значение без нолей, в большой таблице это поле проиндексировать.
13 сен 15, 16:45    [18144025]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить