Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL查询/搜索来自内部联接的记录';s列_Sql Server_Inner Join_Where_Sql Like - Fatal编程技术网

Sql server SQL查询/搜索来自内部联接的记录';s列

Sql server SQL查询/搜索来自内部联接的记录';s列,sql-server,inner-join,where,sql-like,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

查询:

   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
查询结果如下:

   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
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)
库存制作表

inv_ID    inv_name
14         abc
15         bcx
16         glx
17         lco
18         btx
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)
型号表

inv_ID    inv_name
14         abc
15         bcx
16         glx
17         lco
18         btx
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)
我需要做的是找到与库存表中的inv_ID或model表中的model_名称匹配的用户输入记录。为此,我对查询进行了如下编辑

  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

我不知道为什么您的查询有一个名为STUFF的函数,也不知道XML路径(“”)的函数是什么

我也不确定“%@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\u ID使用LIKE没有多大意义。也许您真正想要的是将用户的输入与inv\u name匹配?

STUFF和FOR XML PATH(“”)类似于MYSQL中的GROUP\u CONCAT()。不,这不是我所期望的。但是感谢您在这里帮助我。为什么我的答案没有回答“我需要做的是找到与库存表中的库存ID或模型表中的模型名称匹配的用户输入记录。”您的查询是正确的,但您已更改了我的原始查询。