假設正常化是可能的,這裏是一個簡單的查詢,將這樣的伎倆:
創建示例表:
DECLARE @Categories as table
(
id int identity(1,1),
name char(1)
)
DECLARE @Products as table
(
id int identity(1,1),
name varchar(100),
categoryId int
)
DECLARE @Filter as table
(
id int identity(1,1),
ContainText varchar(100)
)
DECLARE @FilterCategories as table
(
FilterId int,
CategoryId int,
PRIMARY KEY(filterId, CategoryId)
)
填充樣本表:
INSERT INTO @Categories
VALUES ('A'),('B'),('C'),('D'),('E')
INSERT INTO @Products (name, categoryId)
VALUES ('cat A', 1),('category A', 1), ('cat B', 2), ('category B', 2)
INSERT INTO @Filter
VALUES ('gory'), ('cat')
INSERT INTO @FilterCategories
VALUES (1, 1), (1, 2), (2, 1)
查詢:
SELECT DISTINCT p.id As ProductId,
p.name As ProductName,
c.name As CategoryName
FROM @Filter f
INNER JOIN @FilterCategories fc ON(f.id = fc.FilterId)
INNER JOIN @Products p ON(p.categoryId = fc.CategoryId)
INNER JOIN @Categories c ON(p.categoryId = c.id)
WHERE p.name LIKE '%'+ f.ContainText +'%'
結果:
ProductId ProductName CategoryName
----------- ------------------------------ ------------
1 cat A A
2 category A A
4 category B B
請發佈樣本數據和預期結果。 –
你的'過濾器'表需要正常化。像這樣存儲逗號分隔的值是一個非常糟糕的主意。 –
如果你有任何想法正常化過濾表請提示我。 –