我当然有一张桌子:
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)
我想要做的是:如果只选择国家/地区,那么数据应该仅基于国家/或者如果我只选择流,那么只有当我选择两个或更多时才从流中获取数据,那么数据提取应该基于那些列。
我怎样才能获得完美的结果?
答案 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)