根据同一个表中的多个列从表中获取数据

时间:2016-05-04 09:20:13

标签: sql sql-server

我当然有一张桌子:

http://www.deltaxml.com/products/core/

我想根据列Country,university,level,interest和substream从搜索中获取数据。

查询我尝试但未获得更好的结果。

select *
from edu_college_desc
where (country = @country and
       university = @university and
       leveln = @level and
       interest = @interest and
       substream=@substream)
   or (country = @country or
       university = @university or
       leveln = @level or
       interest = @interest or
       substream = @substream) 

我想要做的是:如果只选择国家/地区,那么数据应该仅基于国家/或者如果我只选择流,那么只有当我选择两个或更多时才从流中获取数据,那么数据提取应该基于那些列。

我怎样才能获得完美的结果?

4 个答案:

答案 0 :(得分:2)

试试这个方法,

select * from edu_college_desc 
where   country     =   ISNULL(@country ,country)
    and university  =   ISNULL(@university ,university)
    and leveln      =   ISNULL(@level ,leveln)
    and interest    =   ISNULL(@interest ,interest
    and substream   =   ISNULL(@substream,substream)

在此,您可以将值NULL传递给任何参数(如果未选中)。(即,如果您仅为@university设置了值,而其他参数为NULL,那么结果将是university = @university

答案 1 :(得分:2)

对于每个类别,检查参数是否为空(未给定)或与指定的相同:

select *
from edu_college_desc
where (@country is null or country = @country)
  and (@university is null or university = @university)
  and etc...

当然,您也可以使用MS SQL Server的ISNULL,就像在Abdul Rasheed的回答中一样。方便但不太便携。

答案 2 :(得分:1)

您的查询应该是:

SELECT * FROM edu_college_desc WHERE (@country IS NULL OR country = @country) AND (@university IS NULL OR university = @university) AND (@level IS NULL OR level = @level ) AND (@interest IS NULL OR interest = @interest) AND (@substream IS NULL OR substream= @substream)

答案 3 :(得分:0)

此代码肯定会对您有所帮助。

  

SELECT * FROM edu_college_desc WHERE (country = @country or isnull(@country,0)= 0) AND (university = @university or isnull(@university,0)= 0) AND (leveln = @leveln or isnull(@leveln,0)= 0) AND (interest = @interest or isnull(@interest,0)= 0) AND (substream=@substream or isnull(@substream,0)= 0)