如果数据库必须为“关键字”使用分隔的长字符串字段而不是将它们放在行中,那么您将需要使用LIKE 运算符
假设您的[keywords]
列格式如下:
'巧克力、甘纳许、草莓'
您可以像这样搜索“相似”的蛋糕:
SELECT
columns
FROM
table t
WHERE
t.[keywords] LIKE '%chocolate%'
OR t.[keywords] LIKE '%cheesecake%'
不过,如果您可以更改架构,我会这样做。搜索规范化的关键字行将比使用 DB 通过文本解析更有效和更快LIKE
如果您可以创建一个通过 ID 引用父表的keywords
table,那么您可以使用 a 进行相等搜索JOIN
,这在我看来会更好。
它可能有三列:Id、ParentId、Keyword
编辑:所以根据你的更新,你有一个cakewords
可以搜索的表。
这是未经测试的,并且可能有一种更有效的方式使用 noIN
子句。但想法是您知道特定蛋糕的所有关键字 ID。然后,您正在寻找在该集合中具有关键字的其他蛋糕。
SELECT
columns
FROM
cake AS cs
JOIN
cakewords AS csw
ON csw.[cakeid] = cs.[id]
WHERE
csw.[wordid] IN
(SELECT
cw.[wordid]
FROM
cakewords AS cw
JOIN
cakes AS c
ON c.[id] = cw.[cakeid]
WHERE
c.[id] = @pMyCurrenctCakeId
(
EDIT2:这是一个很好的相关问题:
标签/关键字匹配的最佳解决方案是什么?
根据里面的答案,你可以试试这个:
SELECT DISTINCT
c.[id]
FROM
cakewords AS cw1
INNER JOIN cakewords cw2
ON cw2.[wordid] = cw1.[wordid]
INNER JOIN cake AS c
ON c.[id] = cw.[cakeid]
WHERE
cw1.[cakeid] = @current_cake_id