У меня есть 4 таблицы в базе данныхфильтрация записей из базы данных
Users
с колоннамиId, Email, Password, Active
InformationData
с колоннамиId, Title, Description, Link
Filters
с колоннамиId, Keyword, Active
LUserToFilter
с колоннамиUserId, FilterId
Теперь я хочу отфильтровать определенные записи из таблицы InformationData
, в которой заголовок и описание не содержит ключевых слов из таблицы фильтров, и мы выбираем эти фильтры из таблицы LUserToFilter
на основе определенного идентификатора пользователя.
Я пробовал этот запрос, но он возвращает только те записи, которые содержат отфильтрованные ключевые слова и не возвращают другие записи.
Create Procedure [dbo].[SP_GetFilteredData]
@userid int
as
begin
select D.* from Filters f
inner join LUsersToFilters L on L.FilterId=F.Id
inner join InformationData D on D.Title like '%'+F.KeyWord+'%' or D.Description like '%'+F.KeyWord+'%'
where [email protected]
end
Любое предложение пожалуйста ..
Side Примечание: вы должны ** ** не использовать 'sp_' префикс для хранимых процедур. Microsoft [зарезервировала этот префикс для собственного использования (см. * Именование сохраненных процедур *)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx) и вы рискуете столкнуться с именем когда-нибудь в будущем. [Это также плохо для производительности вашей хранимой процедуры] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). Лучше просто просто избегать 'sp_' и использовать что-то еще в качестве префикса - или никакого префикса вообще! –
Хорошо, извините за использование sp_ и за английское письмо, но написание английского на этом пути - это моя привычка, я попытаюсь избавиться от него. – Hammad
Я все еще не совсем понимаю, что вы хотите отфильтровать (например, не показывать), а какие строки вы хотите показать. Правильно ли я понял: вы хотите ** показать ** эти строки из «InformationData», которые ** не содержат ** ни одного слова из «Фильтров» в их столбцах названия или описания? –