#sql-server #database #sql-like
#sql-сервер #База данных #sql-подобный
Вопрос:
У меня есть база данных SQL Server с большой products
таблицей и category
таблицей.
В product
таблице есть category
столбец, который содержит идентификатор соответствующей категории. Что мне нужно сделать, это выполнить запрос LIKE как для столбца product name, так и для соответствующего названия категории и вернуть все совпадения.
Какой подход мне следует использовать, учитывая, что я хочу минимизировать нагрузку на сервер?
ОТРЕДАКТИРУЙТЕ, чтобы улучшить этот вопрос:
Результаты:
product1 name-> red apple catId-> 3 (cat_id = 3, «лучшие яблоки»)
название продукта2-> идентификатор зеленого яблока-> 5 (cat_id = 5, «хорошие фрукты»)
product3 name-> green banana catId-> 8 (cat_id = 8, «яблоки и бананы»)
Комментарии:
1. легко. Просто соедините две таблицы и используйте опцию like
Ответ №1:
Если я правильно понимаю, это поможет вам —
create table products(
ID INT PRIMARY KEY,
[Name] NVARCHAR(MAX),
[CatId] INT
)
CREATE TABLE CATEGORIES(
ID INT PRIMARY KEY,
[Name] NVARCHAR(MAX)
)
insert into CATEGORIES values(1, 'Laptop')
insert into CATEGORIES values(2, 'Fruit')
insert into products values (2, 'Washington Apple', 2)
insert into products values (1, 'Apple mac book pro', 1)
select * from products
SELECT p.[Name] as ProductName, c.[Name] as CategoryName FROM products p LEFT JOIN CATEGORIES c ON p.CatId = c.ID Where p.[Name] like '%apple%'
Этот код объединит две таблицы и вернет продукты, название которых соответствует ключевому слову, а также вернет названия их категорий. Вы можете изменить определение продуктов и категорий, чтобы включить другие нужные столбцы. Возможно, вы также захотите добавить ограничение FK для catid.
Комментарии:
1. Это делает то, что вы описали очень хорошо. Спасибо, но то, чего я пытался достичь, было другим, но я думаю, что это хорошее начало.
2. Я улучшу свой вопрос