当前位置: 首页 > 面试题库 >

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

蒋健
2023-03-14
问题内容

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

@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)


问题答案:

使用该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函数来填充该表值参数。



 类似资料:
  • 问题内容: 我有从.net应用程序A,B,C,D,E,F获取的字符串, 我想写一个SQL选择语句像 这在t-SQL中将不起作用,因为它使用不将值分开的一个字符串。有什么办法可以做到这一点? 问题答案: 它认为最简单的方法是动态SQL生成:

  • 我们正在对CITY、ST、ZIP形式的邮政编码进行丢失验证。这些可以跨越国家,因此以下所有内容都是有效的: > 宾夕法尼亚州匹兹堡,15020 安大略省汉密尔顿市L8E 4B3 我想验证的是,我们有三个逗号分隔的单词(空格可以)。所有这些都是有效的: foo、bar、baz 然而,这些将是无效的,因为它们没有两个逗号和三个单词: foo, bar 嘘,酒吧,巴兹,砰 foo,酒吧, foo, ba

  • 问题内容: 我有一个像 我想把它分成那些字符串 如果我简单地打电话给我,那么在修剪之后我会得到不同的结果,因为在某些字符串中,例如,仍然有一个逗号。但我不想放在方括号中。有解决这个问题的优雅方法吗? 问题答案: 假设和没有嵌套和未转义。您可以使用以下方式进行拆分: 正则演示 如果逗号后面没有非圆括号和,则将匹配逗号,从而忽略和中的逗号。

  • 我正在尝试使用正则表达式验证ruby类中文本字段中逗号分隔的单词字符串。以下应该是有效的: 以下内容应无效: 我以为这能行 在Rubular上,它似乎是有效的,但当我在我的类中进行如下验证时,它会接受应该是无效字符串的内容。 我不确定我的问题是在于正则表达式还是验证方法本身。感谢任何帮助。

  • 问题内容: 我正在寻找将其转换为6个元素的数组:a,b,c,“ d,e,f”,g,h。我正在尝试通过Javascript执行此操作。这是我到目前为止所拥有的: 但是现在,它会将双引号中的所有内容都分割开了,这是不正确的。 编辑:好的,抱歉,我对这个问题的措辞很差。给我一个字符串而不是数组。 我想使用“ split”功能将 其 转换为数组。 问题答案: 这就是我要做的。

  • 问题内容: 如果用户定义的变量是一串用逗号分隔的数字,例如,是否可以在函数中使用它? 具体来说: 不选择t等于c等于1或2或4的行。 问题答案: 您不能直接使用变量来执行此操作。根据您现在拥有的内容,服务器正在尝试执行…显然,这不是您想要的,因为您要检查c是否包含给定的单个字符串。 您必须根据列表生成动态SQL,以使其正常工作。