Запрос SQL Server к нескольким таблицам

#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. Я улучшу свой вопрос