2017-03-17 112 views
1

我有UI有搜索功能的地方。搜索中有2个参数。需要SQL查询输入

用户可以搜索的任一两个参数来获得的结果(即,或者它可以为null)

我有在越来越困难写的确切SQL(SP)的值,当一个一片空白。

例如如下:

declare @param1, @param2 

create table #Ids 
(
    Id bigint, 
    Name varchar(10) 
) 

--Inserting multiple ids in my temp table 
IF @param1 IS NOT NULL 
BEGIN 
    INSERT INTO #Ids (Id, Name) 
     SELECT DISTINCT Id, Name 
     FROM MainIdTable I 
     WHERE (I.Name = @param1) 
END 

SELECT 
    I.Name, S.ID, S.Value 
FROM 
    SecondTable S 
JOIN 
    #Ids I ON S.Id = P.Id 
WHERE 
    S.Date = '2012-01-06' 
    AND s.tempId = ISNULL(@param2, p.tempId) 
  • 如果用户输入param1值,如果用户输入两者param1param2值搜索工作正常
  • ,那么它也能正常工作

但是,如果用户未输入param1值,但只输入param2值,则搜索不起作用。

我认为这是因为我的临时表是空的,当我们进行连接时,它什么都不返回。

任何解决方法,以获得此工作?

感谢

+0

标记您正在使用的dbms。该代码是特定于产品的。 – jarlh

+0

使用'LEFT JOIN' – JohnHC

+0

左连接会给我所有的行,而我只想匹配的行 – user1563677

回答

0
Select I.Name, S.ID, S.Value from 
    SecondTable S 
    LEFT JOIN #Ids I on S.Id = P.Id 
    where S.Date = '2012-01-06' 
    and s.tempId = isnull(@param2, p.tempId) 

你应该使用左这里加入。

+0

左连接会给我所有的行,而我只需要匹配的行。 – user1563677