小编典典

我需要对每个单词的SQL AND条件使用逗号分隔的字符串

sql

所以我有一个参数。可以说:

@Tags = 'Red,Large,New'

我的表格中有一个名为[标签]的字段

假设该字段包含“ Red,Large,New,SomethingElse和SomethingElse”的特定行

我如何才能做到这一点,以基本实现以下逻辑,我将键入以下逻辑以进行理解,但我知道这是错误的:

SELECT * FROM MyTable WHERE
Tags LIKE 'FirstWordInString'
AND Tags Like 'SecondWordInString'
AND Tags Like 'ThirdWordInString'

但是它知道在哪里停下来?知道只有一个字吗?还是两个?还是三个?

工作流程:

有人单击一个标签,然后该标签将过滤数据集。他们单击另一个,然后将标签附加到搜索框,然后通过这两个标签过滤数据集,依此类推。

谢谢!

更新:

这是基于产品的情况。

  1. 创建产品后,创建者可以输入用逗号分隔的搜索标签。
  2. 插入产品后,搜索标签将插入一个单独的表中,该表称为ProductTags(ProductID,TagID)

因此,在“产品”表中,我有一个字段,该字段将它们用字符串分隔以在应用程序端进行显示,并且在基于ProductID的按行分隔的ProductTag表中也可以找到这些相同的标签。

我不了解的是,如果搜索中存在针对该产品的所有标签,则如何在提供结果的选择中放置条件。

我认为仅使用逗号分隔的字段会更容易,但也许我应该使用相应的表(ProductTags)


阅读 198

收藏
2021-04-14

共1个答案

小编典典

使用该ProductTags表的一种关系划分方法是

DECLARE @TagsToSearch TABLE (
  TagId VARCHAR(50) PRIMARY KEY )

INSERT INTO @TagsToSearch
VALUES      ('Red'),
            ('Large'),
            ('New')

SELECT PT.ProductID
FROM   ProductTags PT
       JOIN @TagsToSearch TS
         ON TS.TagId = PT.TagId
GROUP  BY PT.ProductID
HAVING COUNT(*) = (SELECT COUNT(*)
                   FROM   @TagsToSearch)

@TagsToSearch理想情况下,该表是直接从应用程序传递的表值参数,但也可以通过对逗号分隔参数使用split函数来填充该表值参数。

2021-04-14