【发布时间】:2014-02-09 10:14:41
【问题描述】:
查询:
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
【问题讨论】:
标签: sql-server inner-join where sql-like