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

时间:2014-02-19 13:42:28

标签: sql recordset

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

表A包含名称列表,例如

'Jelly','Jam', and 'Juice'

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

Jelly:Blueberry:3oz
Jam:Stawberry:3oz
Jam:Grape,1oz

其中第一个冒号分隔的名称始终包含在表A中。

我想要表A中的distinct recordset,其名称是表B中第一个冒号分隔的名称,表B包含查找变量中包含的搜索关键字。

因此,如果我的搜索关键字为Stawberry,我想获取一个只包含名称Jam的记录集

如果我的关键字为3oz,则我的记录集仅包含JellyJam

CNC中 该数据库是MS SQL Server。据我所知,它不支持substr。我不需要或想要多列。表A基本上是类别表或Parents表。它包含所有已知产品类别的列表。表B是详细的产品表,其中包含有关每个父类别的更具体的信息,其中每个细节用冒号分隔,因此表B中的ach行包含父类别的冒号分隔项,第一项是父类本身(它也存在于父表中(表A)。表B有像'Jam:strawberry:3oz:Smuckers'等行。我想得到一个父母的列表,其详细信息与我选择的关键字匹配。

1 个答案:

答案 0 :(得分:0)

这有点肮脏,但应该满足你的要求。由于字符串列表中的第一个值将是您要查找的值,因此只需抓取字符串的左侧。您的“搜索”值将始终由冒号包围或左侧有一个,因此在搜索中,这就是为什么它们在要查找的值列表中而不是用“%”包围的“喜欢”,因为可以找到不需要的值。

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