查询:
SELECT
(STUFF((SELECT ',' + CONVERT(VARCHAR(50),mode.model_name)
FROM InventoryMake SUB INNER JOIN Model mode ON SUB.model_ID = mode.model_ID
WHERE SUB.inv_ID = CAT.inv_ID FOR XML PATH('')), 1, 1, '' )) [Models],CAT.inv_ID
FROM Inventory CAT
查询结果如下:
Models inv_ID
Pulsar,Hunk 14
Splender,Hunk 15
Chaly (CF50),Hunk,CBZ,Splender 16
Pulsar,Hunk 17
Pulsar,Hunk,CBZ 18
从上面的查询中可以看出,InventoryMake表具有Inventory和Model表中的外键。下面显示的是这些表格的插图。
广告资源表
inv_ID inv_name
14 abc
15 bcx
16 glx
17 lco
18 btx
InventoryMake表
inm_id inv_ID model_ID
1 2 15
7 3 15
8 5 16
9 3 16
10 4 16
11 2 16
12 1 14
13 3 14
14 1 17
15 3 17
模型表
model_ID model_name
1 Pulsar
2 Splender
3 Hunk
4 CBZ
5 Chaly (CF50)
我需要做的是查找用户输入的记录,该记录与Inventory表中的inv_ID或Model表中的model_name匹配。为此,我编辑了如下查询。
SELECT
(STUFF((SELECT ',' + CONVERT(VARCHAR(50),mode.model_name)
FROM InventoryMake SUB INNER JOIN Model mode ON SUB.model_ID = mode.model_ID
WHERE SUB.inv_ID = CAT.inv_ID FOR XML PATH('')), 1, 1, '' )) [Models],CAT.inv_ID
FROM Inventory CAT WHERE CAT.inv_ID LIKE '%@term%'
从上面的查询中可以找到与inv_ID中的术语匹配的记录。但我需要找到与Inventory.inv_ID或Model.model_name匹配的记录。你怎么建议我能做到这一点? 提前致谢。 PS:我正在使用MSSQL
答案 0 :(得分:1)
我不知道为什么你的查询有一个叫做STUFF的函数既不是FOR XML PATH('')。
我也不确定'%@ term%'的含义,或者它是否像你期望的那样工作(它在MySQL中不起作用。
因此,忽略您的查询并查看您提出的问题,我的答案是:
SELECT SUB.inm_id, SUB.inv_ID, SUB.model_ID
FROM InventoryMake SUB
INNER JOIN Inventory CAT ON (SUB.inv_ID = CAT.inv_ID)
INNER JOIN Model ON (SUB.model_ID = Model.model_ID)
WHERE CAT.inv_ID = @term
OR Model.model_name LIKE '%@term%'
请注意,对CAT.inv_ID使用LIKE没有多大意义。也许您想要的实际上是将用户的输入与inv_name匹配?