powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / like когда в результирующей строке тоже маска
25 сообщений из 26, страница 1 из 2
like когда в результирующей строке тоже маска
    #38699383
johnnyg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, All!

Подскажите пожалуйста, как можно лучшим образом решить следующую задачу:
В столбце таблицы A хранятся маски, подходящие для оператора like. К примеру: a_cde%
В столбце таблицы B также хранятся маски подходящие для оператора like. К примеру: ab_def%
Нужно собрать все записи, которые подходят друг другу, учитывая, что в обеих строках маски.
К примеру, записи выше подходят друг другу.

Я делаю это посимвольным сравнением, и на больших объемах данных всё происходит крайне медленно.
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699385
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а чем like не устроил то ?
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699409
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxxа чем like не устроил то ?Наверно, тем, что каждая маска задаёт множество бесконечного количества строк, которые ей удовлетворяют.
А надо доказать, что множества строк, порождённые двумя разными масками, равны друг другу.

johnnyg, лет через 30 напишите здесь, получилось у Вас что-нибудь или нет.
Предсказываю, что напишете "не получилось".
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699414
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johnnygВ столбце таблицы A хранятся маски, подходящие для оператора like. К примеру: a_cde%
В столбце таблицы B также хранятся маски подходящие для оператора like. К примеру: ab_def%
Нужно собрать все записи, которые подходят друг другу, учитывая, что в обеих строках маски.
К примеру, записи выше подходят друг другу.
поясните, почему вы считаете что эти две маски подходят друг другу
строка "afcde", например, подходит первой маске, но не подходит второй
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699416
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapПредсказываю, что напишете "не получилось".
ну се ты так сразу :) Вдруг задача легче ?
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699424
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, если формально написать алгоритм обработки строки каждой маской,
и они совпадут, то, значит, и сами маски равны.
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699425
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShakilljohnnygВ столбце таблицы A хранятся маски, подходящие для оператора like. К примеру: a_cde%
В столбце таблицы B также хранятся маски подходящие для оператора like. К примеру: ab_def%
Нужно собрать все записи, которые подходят друг другу, учитывая, что в обеих строках маски.
К примеру, записи выше подходят друг другу.
поясните, почему вы считаете что эти две маски подходят друг другу
строка "afcde", например, подходит первой маске, но не подходит второйДа. Пример, кстати, неправильный. Или имелось в виду что-то не то...
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699446
johnnyg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно не верно объяснил.
Мне нужно найти строки в таблицах A и B которые подходят друг другу учитывая, что в обеих строках маски.
В примере:
строка 1: a_cde%
строка 2: ab_def%
Подходят друг другу, т.к.:
на позиции 2 первой строки стоит символ '_', следовательно в строке 2 на этой позиции может быть что угодно.
на позиции 3 второй строки стоит символ '_', следовательно в строке 1 на этой позиции может быть что угодно.
на позиции 6 первой строки стоит символ '%', следовательно в строке 2 на этой позиции может быть что угодно или ничего не быть.
на позиции 7 второй строки стоит символ '%', следовательно в строке 1 на этой позиции может быть что угодно или ничего не быть.

Like не подходит. т.к. такой пример вернет нам в обоих выборках пустоту.
Код: sql
1.
2.
3.
4.
5.
select 'a_cde%' as Q into #A
select 'ab_def%' as W into #B

select * from #A, #B  where #A.Q like #B.W 
select * from #A, #B where #B.W like #A.Q
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699465
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johnnyg, но в строке 1 на третьей позиции стоит 'c', следовательно, во второй строке тоже должно быть 'c', а там '_'. не подходит
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699468
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakilljohnnyg, но в строке 1 на третьей позиции стоит 'c', следовательно, во второй строке тоже должно быть 'c', а там '_'. не подходитВидно, он и не думает рассматривать обычные символы как часть маски?
Иначе вообще непонятно.
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699474
johnnyg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shakilljohnnyg, но в строке 1 на третьей позиции стоит 'c', следовательно, во второй строке тоже должно быть 'c', а там '_'. не подходит

Так я же пишу: на позиции 3 второй строки стоит символ '_', следовательно в строке 1 на этой позиции может быть что угодно.

У меня появилась идея это реализовать только посимвольным сравнением:
Идем по обеим строкам:
Если в первой строке на данной позиции '_' или во второй на данной позиции '_', то переходим к следующему символу, если нет то сравниваем символы в строках на данной позиции.
Ну для '%' понятно.

Вопрос в том, можно ли это реализовать как-то по другому, кроме посимвольного сравнения?
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699477
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если предположить, что каждое знакоместо может быть представлено, скажем, 128 символами и длина маски не более 10,
то получим вполне компактный "шумовой" массив данных, на котором можно тестировать маски.
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699485
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johnnygShakilljohnnyg, но в строке 1 на третьей позиции стоит 'c', следовательно, во второй строке тоже должно быть 'c', а там '_'. не подходит

Так я же пишу: на позиции 3 второй строки стоит символ '_', следовательно в строке 1 на этой позиции может быть что угодно.
это проверка применимости второй маски к первой строке, а где проверка применимости первой маски ко второй? или применять можно как попало?


johnnygУ меня появилась идея это реализовать только посимвольным сравнением:
Идем по обеим строкам:
Если в первой строке на данной позиции '_' или во второй на данной позиции '_', то переходим к следующему символу, если нет то сравниваем символы в строках на данной позиции.
Ну для '%' понятно.

интересно. строки 'привет%' и '%пока' будут подходить или нет и почему? и как вы собираетесь их посимвольно сравнивать?
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699488
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маски подходят, если хотя бы одна из них является множеством для остальных.
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699491
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовЕсли предположить, что каждое знакоместо может быть представлено, скажем, 128 символами и длина маски не более 10,
то получим вполне компактный "шумовой" массив данных, на котором можно тестировать маски.

Чет я загнул, это ж 128 в 10 степени.
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699495
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовМаски подходят, если хотя бы одна из них является множеством для остальных. не понял, поясните. в исходном примере ТС две маски, которые описывают два разных, частично пересекающихся множества строк.
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699500
johnnyg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shakillинтересно. строки 'привет%' и '%пока' будут подходить или нет и почему? и как вы собираетесь их посимвольно сравнивать?
Прощу прощения, небольшое уточнение: % может быть только в конце маски.

ShakillВладислав КолосовМаски подходят, если хотя бы одна из них является множеством для остальных. не понял, поясните. в исходном примере ТС две маски, которые описывают два разных, частично пересекающихся множества строк.
Нам нужно собрать только те строки, из обеих таблиц которые описывают два разных, частично пересекающихся множества строк.
Если их множества не пересекаются - не брать.
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699506
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johnnyg частично пересекающихся
глобал вапрос - условие етой частичности у вас у самого сформированно как-то ?
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699530
johnnyg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxxjohnnyg частично пересекающихся
глобал вапрос - условие етой частичности у вас у самого сформированно как-то ?
Прощу прощения - уточнение: частично и полностью пересекающиеся.
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699557
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johnnygПрощу прощения - уточнение: частично и полностью пересекающиеся.

написали бы сразу - выбрать пары масок из таблиц A и B, для которых найдется хотя бы одна строка, подходящая обеим. быстрого решения для больших таблиц тут не вижу
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699585
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше CLR ничего не приходит в голову...
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38699808
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johnnyg
Я делаю это посимвольным сравнением, и на больших объемах данных всё происходит крайне медленно.Что вы называете большими объемами?
Какую скорость обработки вы ожидаете?
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38700382
johnnyg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав КолосовЛучше CLR ничего не приходит в голову...
Если использовать CLR получится ли быстрее посимвольного сравнения в SQL?

MindjohnnygЯ делаю это посимвольным сравнением, и на больших объемах данных всё происходит крайне медленно.Что вы называете большими объемами?
Какую скорость обработки вы ожидаете?
По 100млн строк в каждой таблице.
Любому ускорению от 5% по сравнению с посимвольным сравнением буду рад.
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38700431
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johnnygПо 100млн строк в каждой таблице.
Любому ускорению от 5% по сравнению с посимвольным сравнением буду рад.
у вас два полных скана, некий расход памяти и проверка (100млн * 100млн ) пар.

если маски повторяются в пределах одной таблицы, можно дистинктом уменьшить количество проверяемых пар, но получим затраты на дистинкт; можно отсеять обратные друг другу комбинации; можно сразу выбрать одинаковые маски из A и B как подходящие, можно сразу выбрать случаи когда одна маска покрывает другую и т.д.

вместо посимвольного сравнения можно перейти к самой сути вашей задачи http://stackoverflow.com/questions/2966865/intersection-of-two-regular-expressions , но боюсь, что будет еще медленнее.

и проверьте где у вас медленное звено
...
Рейтинг: 0 / 0
like когда в результирующей строке тоже маска
    #38700511
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсли использовать CLR получится ли быстрее посимвольного сравнения в SQL?


Думаю, что на несколько порядков при том же посимвольном алгоритме (не знаю реализации).
Вам же требуется 10^16 - 10^8 сравнений...
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / like когда в результирующей строке тоже маска
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]