2010-02-24 5 views
2

또 다른 질문에이 정확한 상황이 있는지 확신 할 수 없으므로 중복되는 경우 미안합니다. 반환 위의 쿼리 - 난 내가 (예를 들어) 다음 쿼리 내가 tblLookup에서 CategoryCode 및 tblStock의 범주 코드 사이의 부분 일치 할 필요가SELECT IN 쿼리와 부분 일치시키는 방법은 무엇입니까?

SELECT DISTINCT COUNT(StockID) 
FROM tblStock 
WHERE CategoryCode IN (
SELECT CategoryCode 
FROM tblLookup 
WHERE CategoryID = 'EG') 

을 사용하고있는 분류 시스템에 문제가 EG와 같은 전체 일치는 범주 코드가 반환 된 것처럼 ETC 및 EGT를 가지지 만 범주가 ETCE이면 이것이 발견되지 않습니다. 반환 된 CategoryCodes이 ETC 및 EGT하지만도 필요 와일드 카드 일치가 tblStock에서 부분 매칭을 위해 사용 될 수

SELECT CategoryCode 
FROM tblLookup 
WHERE CategoryID = 'EG' 

: 결과에서 반환 있도록
어떻게 쿼리를 수정할 수 있습니다.

+1

@Tuomas : SQL Server''에서'IN'은'JOIN'보다 효율적입니다 : http://explainextended.com/2009/ 06/16/in-vs-join-vs-exists/ – Quassnoi

+0

@Quassnoi : 음 ... 좋은 링크, 고마워! –

답변

2
SELECT COUNT(StockID) 
FROM (
     SELECT DISTINCT '%' + CategoryCode + '%' AS Expr 
     FROM tblLookup 
     WHERE CategoryID = 'EG' 
     ) cats 
JOIN tblStock s 
ON  s.CategoryCode LIKE cats.Expr 

샘플 스크립트를 재현 :

DECLARE @tblStock TABLE (StockID INT NOT NULL, CategoryCode VARCHAR(100) NOT NULL, quantity FLOAT NOT NULL) 
DECLARE @tblLookup TABLE (CategoryID VARCHAR(100) NOT NULL, CategoryCode VARCHAR(100) NOT NULL) 

INSERT 
INTO @tblStock 
VALUES (1, 'ETCE', 100) 

INSERT 
INTO @tblStock 
VALUES (2, 'ETC', 200) 

INSERT 
INTO @tblStock 
VALUES (3, 'FOO', 300) 

INSERT 
INTO @tblLookup 
VALUES ('EG', 'ETC') 

INSERT 
INTO @tblLookup 
VALUES ('EG', 'EGT') 

SELECT * 
FROM (
     SELECT DISTINCT '%' + CategoryCode + '%' AS Expr 
     FROM @tblLookup 
     WHERE CategoryID = 'EG' 
     ) cats 
JOIN @tblStock s 
ON  s.CategoryCode LIKE cats.Expr 
+0

나는 이런 식으로 시도했다.하지만 조인을 할 때 정확히 일치하지 않는 한 아무것도 반환하지 않기 때문에 "="가 마지막 부분에 대해 LIKE와 함께 작동하지 않는다. – RoguePlanetoid

+0

@Rogue : 원리를 설명하기위한 샘플 스크립트를 추가했습니다. – Quassnoi

+0

예를 들어 주셔서 감사합니다 - 내 자신의 실수였습니다 - 내 조회 테이블에 공백이있는 것으로 밝혀졌습니다. 변환 된 때와 관련된 공백이 문제였습니다 - 다시 한 번 감사드립니다! 진짜 문제를 알아낼 수있게 도와 줬어! – RoguePlanetoid

관련 문제