2017-03-17 17 views
1

検索機能があるUIがあります。検索には2つのパラメータがあります。SQLクエリ入力が必要

ユーザーは、結果、私は正確なSQL(SP)の値のいずれかを書くために得ることに困難を抱えてい

を(すなわち、それのどちらかがnullにすることができます)を取得するために2つのparamsのいずれかを検索することができます無効である。例えば

以下のように:ユーザーはparam1値を入力した場合、検索は

  • 正常に動作

    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) 
    
    • ユーザの両方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

    関連する問題