SQL从内连接列查询/搜索记录

时间:2014-02-09 10:14:42

标签: sql-server inner-join where sql-like

查询:

   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

1 个答案:

答案 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匹配?