我有一个使用此select语句的存储过程:
SELECT dbo.VendorProgram.id,
dbo.VendorProgram.CODE,
dbo.Programs.ProgramName
+ '-' + dbo.Divisions.Division
+ '-' + dbo.Vendors.Source
+ '-' + dbo.Mediums.Medium
+ '-' + dbo.VendorProgram.content
AS SourceDetail,
dbo.Vendors.Source,
dbo.Programs.ProgramName,
dbo.Divisions.Division,
dbo.Mediums.Medium,
dbo.VendorProgram.content,
dbo.VendorProgram.url,
dbo.VendorProgram.cost,
dbo.VendorProgram.Notes,
dbo.VendorProgram.StartDate,
dbo.VendorProgram.EndDate
FROM dbo.Programs
RIGHT OUTER JOIN dbo.VendorProgram
ON dbo.Programs.id = dbo.VendorProgram.programID
LEFT OUTER JOIN dbo.Vendors
ON dbo.VendorProgram.vendorID = dbo.Vendors.mappingID
LEFT OUTER JOIN dbo.Divisions
ON dbo.VendorProgram.divisionID = dbo.Divisions.id
LEFT OUTER JOIN dbo.Mediums
ON dbo.VendorProgram.mediumID = dbo.Mediums.id
基本上我们有一个系统可以为供应商整理代码。它由5个独立的表中提取的5个ID组成。这些表具有实际文本,供应商的名称,介质类型等...与每个ID匹配。到目前为止,我认为在这里没有真正突破性的用途。
我需要做的是能够在文本中编写一个使用参数的查询来搜索这5个单独的表,并查找可以匹配的所有“供应商映射”。我仍然是SQL世界的新手,所以我不太确定那个查询会是什么样子。
作为我想要搜索的一个例子。我在搜索表单中输入供应商字段的文本“Face”。然后我希望查询针对供应商表本身运行一个选择,以首先找到名称中带有“face”的所有可能的供应商ID。然后,它需要从组合表中选择其中包含任何ID的所有行。
希望这是有道理的,也是可能的。一如既往地感谢您的帮助。
答案 0 :(得分:1)
添加
WHERE dbo.Vendors.ID in
(select ID From dbo.Vendors where dbo.Vendors.Field LIKE '%'+ @QueryText + '%'
答案 1 :(得分:1)
SELECT vp.id, vp.CODE,
p.ProgramName + '-' + d.Division + '-' + v.Source + '-' + m.Medium + '-' + vp.content AS SourceDetail,
v.Source,
p.ProgramName,
d.Division,
m.Medium,
vp.content,
vp.url,
vp.cost,
vp.Notes,
vp.StartDate,
vp.EndDate
FROM dbo.Vendors v
LEFT OUTER JOIN dbo.VendorProgram vp vp.vendorID = v.mappingID
LEFT OUTER JOIN dbo.Programs p ON p.id = vp.programID
LEFT OUTER JOIN dbo.Divisions d ON vp.divisionID = d.id
LEFT OUTER JOIN dbo.Mediums m ON vp.mediumID = m.id
WHERE v.Name LIKE '%Face%'
答案 2 :(得分:0)
如果您只想要与搜索相关的行,请切换到内部联接(或包含一些不为空的部分),并在您与供应商的联接中包括:
AND Vendor.VendorName LIKE @PassedInParam
@PassedInParam将被传递到你的proc中,并且是你的搜索字符串,两侧都有'%',即'%face%'