2011-04-01 89 views
0

我將如何去結合這兩個語句。基本上這是一個搜索,我希望用戶能夠搜索名稱,公司或筆記。筆記在另一個表中稱爲行爲。其中有一個CID的外鍵。我希望它只返回匹配任何已填寫內容的結果。因此,搜索名稱:Bob Notes:Golf不會返回所有在筆記中打高爾夫球的用戶,但只會返回一個名字爲bob的人,並在筆記字段中打高爾夫球。SQL創建搜索語句問題

我遇到的問題是如果Notes確實返回多於一行,那麼它會破壞我使用第一條語句的機會。

我使用的是SQL-Server 2005的感謝

1日聲明:

SELECT DISTINCT CID, Name, Comp, Email 
From Con 
Where (Name IS NULL OR Name LIKE '%' + @name + '%') 
AND (Comp IS NULL or Comp LIKE '%' + @comp + '%') 

第二屆聲明:

If @notes <> '' 
Begin 
SET @newid = 
(
Select CID  
From Act 
Where Note LIKE '%' + @notes + '%' 
) 
Select DISTINCT CID, Name, Comp, Email 
From Contacts c 
Where (CID= @newid) 
End 

回答

0
SELECT DISTINCT CID, Name, Comp, Email 
From Con 
Where (Name IS NULL OR Name LIKE '%' + @name + '%') 
    AND (Comp IS NULL or Comp LIKE '%' + @comp + '%') 
    AND (
     @notes = '' 
     OR EXISTS (
      Select CID  
      From Act 
      Where Note LIKE '%' + @notes + '%' 
       AND @notes <> '' 
       AND Act.CID = Con.CID 
     ) 
    ) 
+0

的一種方法,它不依賴在相關的子查詢上可能會有更好的表現。 – Shawn 2011-04-01 17:58:37

0
SELECT DISTINCT CID, Name, Comp, Email 
From Con 
Where (Name IS NULL OR Name LIKE '%' + @name + '%') 
AND (Comp IS NULL or Comp LIKE '%' + @comp + '%') 
UNION ALL 
Select DISTINCT CID, Name, Comp, Email 
From Contacts c 
Where (CID = (Select CID From Act Where @notes <> '' AND Note LIKE '%' + @notes + '%'))