需要有关复杂SQL查询的帮助

时间:2010-08-13 14:03:02

标签: sql sql-server select

我有一个使用此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的所有行。

希望这是有道理的,也是可能的。一如既往地感谢您的帮助。

3 个答案:

答案 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%'