ユーザーがアクセスできるストアのリストを取得するクエリがあります。ただし、ユーザーが内部スタッフ メンバーである場合、自動的にすべてのストアにアクセスできます。
スタッフ テーブルでは、これは Internal と呼ばれる列で示されます。これは、内部スタッフである場合は 1、内部スタッフではない場合は 0 で表されます。
現在、userId が渡されるユーザーのストアのリストを取得するストアド プロシージャがあります。ストアド プロシージャは次のようになります。そのため、クエリを1つに結合する方法を見つけようとしています。
DECLARE @IsInternal bit
SELECT @IsInternal = Staff.Internal FROM Staff WHERE Staff.StaffId = @userId
IF(@IsInternal = 0)
BEGIN
SELECT DISTINCT Store.Id, Store.Name,
FROM
Store JOIN StaffAccess ON StaffAccess.StoreID = Store.StoreId
JOIN Staff ON StaffAccess.StaffId= Staff.StaffId
WHERE
StaffAccess.StaffID = @userId
ORDER BY
Store.Name
END
ELSE
BEGIN
SELECT DISTINCT Store.Id,Store.Name,
FROM Store
ORDER BY Store.Name
END
申し訳ありませんが、スタッフアクセステーブルがあることを含めるべきでした。以下を実行すると、内部スタッフではないユーザーのすべての店舗が返されます
SELECT DISTINCT
Store.Id,
Store.Name,
FROM
Store
JOIN StaffAccess ON StaffAccess.StoreID = Store.StoreId
JOIN Staff on Staff.Internal= 1 OR (StaffAccess.StaffID = @userId AND StaffAccess.StaffId = Staff.StaffId)
ORDER BY
Store.Name