基本的に、私はこのような3つのテーブルを持っています(多対多の関係があります); そして、私はこのように検索しています。
ALTER PROC [dbo].[usp_ContactSearch]
(
@PersonName varchar(60)= '',
@MobileNo varchar(20)= '',
@Nationlity varchar(50)='' ,
@ContactTypes varchar(max) = ''
)
AS
BEGIN
SELECT DISTINCT c.ContactId, c.PersonName, ct.ContactType, ct.ContactTypeId
FROM Contact c
LEFT OUTER JOIN ContactWithContactType cct
ON c.ContactId = cct.ContactId
LEFT OUTER JOIN ContactType ct
ON cct.CountactTypeId = ct.ContactTypeId
WHERE
c.PersonName LIKE CASE WHEN @PersonName='' THEN c.PersonName ELSE '%'+@PersonName+'%' END
AND
c.MobileNo1 LIKE CASE WHEN @MobileNo='' THEN c.MobileNo1 ELSE '%'+@MobileNo+'%' END
AND
c.Nationality LIKE CASE WHEN @Nationlity='' THEN c.Nationality ELSE '%'+@Nationlity+'%' END
END
したがって、デフォルトの結果データは次のとおりです。
したがって、フロント エンドから、私はContactTypesを持っています(これは動的です。つまり、連絡先の種類のテーブルから来ています)。インターフェイスは次のようになります。
ここで、ユーザーがPropertyOwner (ContactTypeId=1) をチェックするたび
に、2 番目のチェックボックス、つまりTenant (ContactTypeId=2)をチェックすると、データがフィルタリングされ、 ContactTypeId=1に属する連絡先のみが表示されます。データはさらにフィルタリングする必要があり、ContactTypeId= 1 および 2 に属する連絡先のみが表示されます。同様に、3 番目の ContactType についても、データをさらにフィルタリングする必要があります。
したがって、問題はContactTypesが動的であり、この状況を処理する方法がわかりません。
クエリとパフォーマンスに関するヘルプは非常に高く評価されています。