Sql server 如何筛选SQL Server SQL查询中的一列

Sql server 如何筛选SQL Server SQL查询中的一列,sql-server,sql,Sql Server,Sql,我有一个与许多其他表相关的表,在这些表中,我想筛选RequesterID列中的一列-该列将是一个组合框,其中只有非销售人员可以选择 这是未过滤的查询,我们将其称为查询1: SELECT RequestsID, RequesterID, ProductsID FROM dbo.Requests 如果使用单独的查询(称为查询2)来过滤RequesterID,它是一个与人员相关的列,连接到People.PeopleID,它将如下所示: SELECT People.PeopleID FROM

我有一个与许多其他表相关的表,在这些表中,我想筛选RequesterID列中的一列-该列将是一个组合框,其中只有非销售人员可以选择

这是未过滤的查询,我们将其称为查询1:

SELECT RequestsID, RequesterID, ProductsID
FROM dbo.Requests
如果使用单独的查询(称为查询2)来过滤RequesterID,它是一个与人员相关的列,连接到People.PeopleID,它将如下所示:

SELECT     People.PeopleID
FROM         People INNER JOIN
                  Roles ON People.RolesID = Roles.RolesID INNER JOIN
                  Requests ON People.PeopleID = Requests.RequesterID
WHERE     (Roles.Role <> N'SalesGuy')
ORDER BY Requests.RequestsID

是的,RequesterID 8恰好是销售人员:-

这是一篇关于如何处理此主题的非常全面的文章:

它涵盖了尝试使用多个可选搜索条件编写查询的所有问题和方法。您需要关注的主要问题不是代码的复制,而是索引的使用。如果您的查询无法使用索引,那么它的性能将很差。有几种技术可以使用,它们可能允许也可能不允许使用索引

目录如下:

Introduction The Case Study: Searching Orders The Northgale Database Dynamic SQL Introduction Using sp_executesql Using the CLR Using EXEC() When Caching Is Not Really What You Want Static SQL Introduction x = @x OR @x IS NULL Using IF statements Umachandar's Bag of Tricks Using Temp Tables x = @x AND @x IS NOT NULL Handling Complex Conditions Hybrid Solutions – Using both Static and Dynamic SQL Using Views Using Inline Table Functions Conclusion Feedback and Acknowledgements Revision History 并在运行时对其进行优化,以提供仅传入@Search2的值:

WHERE
    Column2=@Search2

如果在第2列定义了索引,则可以使用索引。这是怎么回事?由于查询已经在requests表上联接,您只需将列添加到select列表,如下所示:

SELECT     Requests.RequestsID, Requests.RequesterID, Requests.ProductsID
FROM         People INNER JOIN
                  Roles ON People.RolesID = Roles.RolesID INNER JOIN
                  Requests ON People.PeopleID = Requests.RequesterID
WHERE     (Roles.Role <> N'SalesGuy')
ORDER BY Requests.RequestsID
实际上,您可以从任何联接表角色、请求、人员等中选择任何列


如果将People.PeopleId替换为*就很清楚了,它将显示从表中检索到的所有内容。

我也这么认为。虽然我已经读了三遍这个问题,但我还是不能确定这个要求!我看不到任何动态列要求,但可能缺少一些内容。选择*是一种不好的做法。它将浪费返回列中未使用的资源,并阻止使用覆盖索引@Martain Smith,我也不确定OP的“合并”是什么意思,结果集应该是什么?如何过滤?等等。结果集应该是一个请求数-请求数不应该受到查询2的限制。查询2:s唯一的功能是限制Requests.RequesterID列中的可选子集-不,这不是很清楚,但在C VS2008实现中,我使用Requests.RequesterID最终用[Full name]填充组合框,这是People表中的另一列…我的意思是填充我想要的PeopleID列表的查询2,在某种程度上,我们应该能够在一个查询中与查询1一起工作-合并可能不是最好的词,但我不知道如何实际使用它-我希望这为您清除了它。我已经更新了我的答案。变暖了?
WHERE
    Column2=@Search2
SELECT     Requests.RequestsID, Requests.RequesterID, Requests.ProductsID
FROM         People INNER JOIN
                  Roles ON People.RolesID = Roles.RolesID INNER JOIN
                  Requests ON People.PeopleID = Requests.RequesterID
WHERE     (Roles.Role <> N'SalesGuy')
ORDER BY Requests.RequestsID