Используйте оператор LIKE в части ВНУТРЕННЕГО ОБЪЕДИНЕНИЯ

Для выбора только определенных столбцов из нескольких столбцов для заданного значения в pandas:

select col_name1, col_name2 from table where column_name = some_value.

Опции:

df.loc[df['column_name'] == some_value][[col_name1, col_name2]]

или

df.query['column_name' == 'some_value'][[col_name1, col_name2]]
15
задан morgb 3 August 2016 в 19:05
поделиться

8 ответов

Ваш первый запрос будет работать, но потребует полного сканирования таблицы, потому что любой индекс на том столбце будет проигнорирован. Необходимо будет также сделать некоторый динамический SQL для генерации всех операторов LIKE.

Попытка полнотекстовый поиск, если Ваш SQL Server использования или выезд один из Lucene реализации. Joel недавно говорил о своем успехе с ним.

5
ответ дан 1 December 2019 в 04:19
поделиться

Кажется на поиск полнотекстового поиска. Поскольку Вы хотите запросить ряд ключевых слов против описания платы и найти какие-либо хиты? Корректный?

1
ответ дан 1 December 2019 в 04:19
поделиться

Лично, я сделал это прежде, и это удалось хорошо для меня. Единственными проблемами, которые я видел, являются возможно проблемы с неиндексируемым столбцом, но я думаю, что у Вас была бы та же проблема с где пункт.

Мой совет Вам является просто взглядом на планы выполнения между двумя. Я уверен, что это будет отличаться, какой лучше в зависимости от ситуации, точно так же, как все хорошие проблемы программирования.

1
ответ дан 1 December 2019 в 04:19
поделиться

@Dillie-O
, Насколько большой эта таблица?
, Каков тип данных поля Description?

, Если любой является маленьким, полнотекстовый поиск будет излишеством.

@Dillie-O
, Возможно, не ответ Вы, где поиск, но я защитил бы изменение схемы...

предложенная схема:

create table name(
    nameID identity / int
   ,name varchar(50))

create table description(
    descID identity / int
   ,desc varchar(50)) --something reasonable and to make the most of it alwase lower case your values

create table nameDescJunc(
    nameID  int
    ,descID int)

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

связанный: Рекомендуемый дизайн базы данных SQL для тегов или метки

1
ответ дан 1 December 2019 в 04:19
поделиться

Производительность будет, зависят от фактического сервера, чем Вы используете, и от схемы данных и объема данных. С текущими версиями SQL Server MS тот запрос должен работать очень хорошо (MS SQL Server 7.0 имел проблемы с тем синтаксисом, но он был обращен в SP2).

Вы выполнили тот код через профилировщика? Если производительность является достаточно высокой, и данные имеют в распоряжении соответствующие индексы, Вы должны быть все установлены.

0
ответ дан 1 December 2019 в 04:19
поделиться

КАК '%fiend %' никогда не будет использовать искание, КАК '% злодея' будет. Просто подстановочный поиск не является sargable

0
ответ дан 1 December 2019 в 04:19
поделиться

трюк, который я немного подобрал, иди сделать "строго типизированный" анализ списка в хранимая процедура должна проанализировать список в табличной переменной / временный таблица

Я думаю, что вы могли бы здесь сослаться на то, чтобы поместить ключевые слова для включения в таблицу, а затем использовать реляционное деление для поиска совпадений (также можно использовать другую таблицу для слов, которые следует исключить). Рабочий пример в SQL см. В Поиск по ключевым словам Джо Селко .

1
ответ дан 1 December 2019 в 04:19
поделиться

Попробуйте это;

SELECT Id, Name, Description
FROM dbo.Card
INNER JOIN @tblKeyword ON dbo.Card.Description LIKE '%' + 
                                CONCAT(CONCAT('%',@tblKeyword.Value),'%') + '%'
0
ответ дан 1 December 2019 в 04:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: