我想知道如何查询具有两个与特定顺序中的关键字匹配的表的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
,则我的记录集仅包含Jelly
和Jam
CNC中 该数据库是MS SQL Server。据我所知,它不支持substr。我不需要或想要多列。表A基本上是类别表或Parents表。它包含所有已知产品类别的列表。表B是详细的产品表,其中包含有关每个父类别的更具体的信息,其中每个细节用冒号分隔,因此表B中的ach行包含父类别的冒号分隔项,第一项是父类本身(它也存在于父表中(表A)。表B有像'Jam:strawberry:3oz:Smuckers'等行。我想得到一个父母的列表,其详细信息与我选择的关键字匹配。
答案 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))