-1

我的数据库有一个名为标签的列,它链接到一个帐号。例如,我可以为一个帐户设置 5 个标签,蓝色、红色、绿色、黄色、粉红色,另一个帐户使用红色、蓝色、黑色。

当我进行搜索时,我希望能够搜索多个标签,例如蓝色、红色、白色,并让它返回带有任何这些标签的任何帐户。

实现这一目标的最佳方法是什么?

4

1 回答 1

0

在这里您可以看到该技术,但您可以以不同的方式实现(例如,具有将 CSV 转换为具有一列的表的表值函数):

/* Preparaing the test data */
DECLARE @DataSource TABLE
(
     [UserID] INT
    ,[Tag] VARCHAR(12)
)

INSERT INTO @DataSource ([UserID], [Tag])
VALUES (1, 'red')
      ,(1, 'blue')
      ,(2, 'red')
      ,(2, 'black')
      ,(2, 'green')
      ,(3, 'black')
      ,(3, 'green')
      ,(4, 'yellow')
      ,(5, 'red')
      ,(6, 'black')

/* Setting filter value*/
DECLARE @FiltersValuesInCSV VARCHAR(MAX) = 'red,black'


/* Solution */

DECLARE @XML xml = N'<r><![CDATA[' + REPLACE(@FiltersValuesInCSV, ',', ']]></r><r><![CDATA[') + ']]></r>'


;WITH Colors([Color]) AS
(
    SELECT DISTINCT RTRIM(LTRIM(Tbl.Col.value('.', 'nvarchar(250)')))
    FROM @xml.nodes('//r') Tbl(Col)
)
SELECT DISTINCT [UserID]
FROM @DataSource DS
INNER JOIN Colors C
    ON DS.[Tag] = C.[Color] 
于 2013-11-12T08:00:53.690 回答