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或模型表中的模型名称匹配的用户输入记录。”您的查询是正确的,但您已更改了我的原始查询。