2017-02-08 15 views
3

姓と名で人を検索するために使用できるストアドプロシージャを作成しようとしています。 FnameとLnameは2つの異なるテーブルにまとめられており、Table1から引っ張ってきて一致するものがなければTable2から結果を引きます。最初のテーブルに一致がない場合、2つのテーブルから結果を引き出す

@FName VARCHAR(20) = NULL 
@LName VARCHAR(20) = NULL, 

SELECT TB1.ID, TB1.FName, TB1.LName 

FROM Table1 TB1 
     LEFT JOIN Table2 TB2 
      ON TB1.ID = TB2.ID 

WHERE 1=1 
     AND COALESCE(TB1.Fname, '') LIKE '%' + REPLACE(COALESCE(@FName, TB1.Fname, ''), ' ', '%') + '%' 
     AND COALESCE(TB1.Fname, '') LIKE '%' + REPLACE(COALESCE(@LName, TB1.Fname, ''), ' ', '%') + '%' 

私がこれまでに試したのはこれでしたが、すべての記録を取り戻すようです。

WHERE 1=1 
     AND COALESCE(TB1.Fname, '') LIKE '%' + REPLACE(COALESCE(@FName, TB1.Fname, ''), ' ', '%') + '%' 
     OR COALESCE(TB2.Fname, '') LIKE '%' + REPLACE(COALESCE(@FName, TB2.Fname, ''), ' ', '%') + '%' 
     AND COALESCE(TB1.Lname, '') LIKE '%' + REPLACE(COALESCE(@LName, TB1.Lname, ''), ' ', '%') + '%' 
     OR COALESCE(TB2.Lname, '') LIKE '%' + REPLACE(COALESCE(@LName, TB2.Lname, ''), ' ', '%') + '%' 

任意のヘルプやガイダンスが感謝される、私は最後の日かそこらのためにグーグルをしましたが、私は私が間違っているものをグーグルでいますね。

+0

おそらく、WHERE条件をON句に移動したいとします。 – jarlh

答えて

2

完全結合を使用して、データが含まれているテーブルから結果が引き出されるように結合してください。

SELECT Coalesce(TB1.ID, TB2.ID) As ID, 
     Coalesce(TB1.FName, TB2.FName) As FName, 
     Coalesce(TB1.LName,TB2.LName) As LName 
FROM Table1 TB1 
     Full JOIN Table2 TB2 
      ON TB1.ID = TB2.ID 
+0

それはそれを見て別の方法です、病気を試してみる必要があります。 – poohbear

1

しばらく遊んとG Mastrosを投稿何を見た後、それは私が私が私が必要本当にすべてが1だったときに、2つのORステートメントを呼び出すようにしようとしていたかについて考えるようになりました。だから私はCOLESCEステートメントを少し変更して1つに入れてORこれは私に必要な結果を返しました。

これは、必要に応じて他のリクエストを追加する機能があると感じます。たとえば、メールや電話番号に基づいて検索する必要がある場合などです。

DECLARE @FName VARCHAR(100) 
DECLARE @LName VARCHAR(100) 

SET @FName = 'Adam' 
SET @LName = NULL, 

SELECT TB1.ID, 
     COALESCE(TB1.FName,TB2.FName) AS FirstName 
     ,COALESCE(TB1.LName,TB2.LName) AS LAstName 

FROM Table1 TB1 
     INNER JOIN Table2 TB2 
      ON TB1.ID = TB2.ID 

WHERE 1=1 
    AND 
     (
     COALESCE(U.Unit_Owner_FName, '') LIKE '%' + COALESCE(@FName, U.Unit_Owner_FName, '') + '%' 
      AND COALESCE(U.Unit_Owner_LName, '') LIKE '%' + COALESCE(@LName, U.Unit_Owner_LName, '') + '%' 

     OR 

     COALESCE(I.Insured_FName, '') LIKE '%' + COALESCE(@FName, I.Insured_FName, '') + '%' 
      AND COALESCE(I.Insured_LName, '') LIKE '%' + COALESCE(@LName, I.Insured_LName, '') + '%' 
     ) 
関連する問題