Sql 从表A中选择不同的名称,其中表B包含表A中的关键字和名称

Sql 从表A中选择不同的名称,其中表B包含表A中的关键字和名称,sql,recordset,Sql,Recordset,我想知道如何查询具有两个表的SQL数据库,这两个表以特定顺序匹配关键字 表A包含一个名称列表,例如 Jelly:Blueberry:3oz Jam:Stawberry:3oz Jam:Grape,1oz “果冻”、“果酱”和“果汁” 表B包含由冒号分隔的名称列表,例如 Jelly:Blueberry:3oz Jam:Stawberry:3oz Jam:Grape,1oz 其中,以冒号分隔的第一个名称始终包含在表A中 我希望从表a中获得一个不同的记录集,该记录集的名称是表B中以冒号分隔的第一个

我想知道如何查询具有两个表的SQL数据库,这两个表以特定顺序匹配关键字

表A包含一个名称列表,例如

Jelly:Blueberry:3oz
Jam:Stawberry:3oz
Jam:Grape,1oz
“果冻”、“果酱”和“果汁”

表B包含由冒号分隔的名称列表,例如

Jelly:Blueberry:3oz
Jam:Stawberry:3oz
Jam:Grape,1oz
其中,以冒号分隔的第一个名称始终包含在表A中

我希望从表a中获得一个
不同的记录集
,该记录集的名称是表B中以冒号分隔的第一个名称,表B包含查找变量中包含的搜索关键字

因此,例如,如果我的搜索关键字是
Stawberry
,我想获得一个只包含名称
Jam

如果我的关键字是
3oz
,我的记录集将只包含
Jelly
Jam

-编辑-
数据库是MS SQL Server。据我所知,它不支持substr。我不需要或不想要多个列。表A基本上是一个类别表或父表。它包含所有已知产品类别的列表。表B是一个详细的产品表,其中包含有关每个父类别的更具体信息,其中每个详细信息由冒号分隔,表B中的每一行包含父类别的冒号分隔项,第一项是父类别本身(也存在于父表(表a)中).表B中有“Jam:草莓:3oz:Smuckers”等行。我想得到一个父母的列表,他们的详细信息与我选择的关键字匹配。

这有点下流,但应该满足您的要求。因为字符串列表中的第一个值将是您要查找的值,所以语句只需要抓住左边的s字符串的ide。您的“搜索”值将始终由冒号包围,或者在搜索中左侧有一个冒号,这就是为什么它们位于要查找的值列表中,而不是使用“%”包围的“like”,因为这样可能会找到不需要的值

DECLARE @SEARCH_VAL VARCHAR(255) = 'YOUR VALUE HERE'

SELECT * FROM TABLE_A WHERE NAME = (SELECT LEFT(NAME, CHARINDEX(':', NAME, 0)-1) 
FROM TABLE_B WHERE NAME IN (':'+@SEARCH_VAL+':', ':'+@SEARCH_VAL))

您使用的是什么数据库?您真的需要表A吗?类似于
从表B中选择substr(name,XXX),其中名称“%:%”| | param
应该起作用(假设您的数据库支持substr等)。您能提供更多所需输出的示例吗?您想在多行、多列中进行操作吗?