2011-04-01 7 views
0

어떻게하면이 두 문장을 결합 할 수 있습니까? 기본적으로 검색입니다. 사용자가 이름, 회사 또는 메모를 검색 할 수 있기를 바랍니다. Notes는 act라는 다른 테이블에 있습니다. CID의 외래 키가 있습니다. 채워진 내용과 일치하는 결과 만 반환하고 싶습니다. 따라서 Name : Bob Notes : Golf에 대한 검색은 notes에서 골프를 가진 모든 사용자를 반환하지는 않지만 bob이라는 이름의 사람 만 반환하고 notes 필드에서 골프를가집니다.SQL 검색 문 만들기 문제

Notes가 1 행 이상을 리턴하면 첫 번째 명령문에서 저를 사용할 수있는 기회를 파괴합니다.

나는 SQL-서버에게 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 + '%') 

2 차 진술 :

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

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 + '%'))