나는 직원 쿼리 목록에서 SELECT
인 일반 쿼리를 설정했습니다. 내 매개 변수가 searchType = 'omit
인 경우 임시 테이블에 있는지 확인하여 해당 검색에 사람들이 표시되지 않도록하지 않을 것입니다. 위의 예에서 WHERE 절의 SQL Case 문을 사용하여 데이터를 생략하십시오.
-- Params
@searchType varchar(10)
-- Temp Table
DECLARE @omit AS TABLE (userID INT)
INSERT INTO @omit(userID) VALUES (123)
INSERT INTO @omit(userID) VALUES (456)
INSERT INTO @omit(userID) VALUES (789)
-- Query
SELECT *
FROM Employees
WHERE userID NOT IN(
CASE
WHEN @searchType = 'omit'
THEN (SELECT userID FROM @omit)
ELSE ''
END
)
, 내가 절차를 실행하고 내 PARAM으로
omit
을 통과하면, 그것은 그들의
userID
는 임시 테이블에 존재하지 않는 모든 직원을 선택합니다.
이 시도하면 Subquery returned more than 1 value
오류가 발생합니다.
이것을 설정하는 가장 좋은 방법은 무엇입니까?
SELECT e.*
FROM dbo.Employees e
LEFT JOIN @omit o
ON e.userID = o.userID
WHERE NOT (@searchType = 'omit' AND o.userID IS NOT NULL);
'SELECT userID FROM @ omit' 쿼리는 1 행 이상을 반환하므로 대신 'NOT EXISTS'를 사용하는 것이 좋습니다. – Sami