2013-05-21 2 views
2

나는 나에게 또 다른 열에있는 항목 중 하나를 싫어 하나 열에서 모든 항목의 목록, 즉 줄 것이다 쿼리를 실행해야 위의 쿼리가 작동하지 않습니다, 나는 그것을 달성하기 위해 노력하고 명확하게됩니다 희망에서만 제공하고 있습니다.비교 문자열은

COLUMNA: 
ABCD 
ABCE 
BCDE 
BCDF 
BCDEF 
GHIJ 
GHIK 

COLUMNB: 
ABC 
DEF 
HIJ 

내 원하는 결과는 다음과 같습니다 : 그래서, 예를 들어, 내 열 다음이 포함되어 있다고

그래서 그냥 입력 테이블의 열에서 396 개 값의 합계가있다
BCDE 
BCDF 
GHIK 

값을 수동으로 실행할 수 없습니다. 또한이 예에서 알 수 있듯이 columnB의 값은 항상 columnA에있는 값의 부분 문자열이므로 내 쿼리에서이를 염두에두고 비교해야합니다.

누군가가 제공 할 수있는 도움에 대해 미리 감사 드리며이 질문이 이미 다른 곳에서 답변 되었으면 사과드립니다. 검색을 수행했지만이 특정 요구 사항을 해결할 때 해석 할 수있는 것을 찾을 수 없었습니다. NEW 정보를 추가

* 언급 한 바와 같이 *

그래서, 나는 두 개의 열이 다른 테이블에있는 점에서 큰 실수를했다.

TABLE1 T1 왼쪽에서 COLUMNA DISTINCT SELECT T1.COLUMNA LIKE '%'+ T2.COLUMNB + '%'ON TABLE2 T2 가입 다음과 같이 아래 상기하지만, califax의 제안을 수정할 정도로 쉬웠다 AND T2.COLUMNB IS NULL

그러나 여전히 COLUMNA에서 전체 항목 목록을 반환합니다. 나는 COLUMNB의 엔트리가 COLUMNB에있는 엔트리라는 것을 확인했다. 왜 이것이 필터링되지 않는지?

감사합니다.

+0

: 귀하의 질문에)

UPDATE 두 가지 테이블이있는 경우

는 b.ColumnB 당신이 일치하지 않는 사람을 보여줍니다 와일드 카드 = =를 사용하십시오. 와일드 카드에 대한 데이터 구문 분석에 시간을 소비하지 않습니다. – Paparazzi

+0

감사 Blam - COLUMNB의 값이 COLUMNA 값에 존재하면 값이 정확히 일치하는 부분 문자열로 존재하기 때문에 사실 와일드 카드를 비교합니다. – Chris

답변

2

가입 자체를 수행하고 사람을 찾아 (나는 당신이 정확하게 원하는 모르겠어요으로) 일치하지 않는 항목 :

SELECT DISTINCT a1.ColumnA 
FROM TableA a1 
LEFT JOIN TableA a2 
ON a1.ColumnA LIKE '%' + a2.ColumnB + '%' 
AND a2.ColumnB IS NULL 

(내가 원하는 와일드 카드를 추가했습니다. . 그냥 아무와 열을 비교하지 않으면

SELECT DISTINCT a.ColumnA 
FROM TableA a 
LEFT JOIN TableB b 
ON a.ColumnA LIKE '%' + b.ColumnB + '%' 
AND b.ColumnB IS NULL 
+0

@critifax 감사. 이것은 정확히 내가 실행 한 쿼리입니다. 웬일인지, 그것은 필터링을하지 않고있다. 이유를 이해할 수 없습니다. 왜냐하면이 쿼리가 제게 절대적인 의미를 가지기 때문에 작동해야합니다. 하나의 질문 - 테이블 중 하나가 INFORMATION_SCHEMA.COLUMNS 인 경우 아무런 차이가 없어야합니다. – Chris

+0

아니요, 안됩니다. – criticalfix

+0

알겠습니다. 고마워요. 왜 이것이 작동하지 않는지 나는 알 수 없다. 제가 말했듯이, 나는 질의를 완전히 이해합니다. 그리고 그것은 그것이 작동해야한다는 것을 나에게 절대적으로 의미합니다. Excel 및 VLOOKUP을 사용하여 수동으로 처리해야합니다. 감사하지만 모두의 도움에 감사드립니다. – Chris

2

내가 좋아하는 뭔가를 시도 할 것입니다 : criticalfix의 발언 다음

select distinct columnA from tableA where columnA not like '%' + columnB + '%' 

또는

SELECT DISTINCT columnA FROM tableA tbA 
WHERE not exists (select 1 from TableA where tbA.ColumnA like '%' + ColumnB '%') 
+0

ColumnA가 같은 레코드 내에서 ColumnB와 일치하는지 확인하지 않습니까? OP가 테이블 어디서나 ColumnB 일치를 찾고 있다고 생각합니다. 맞습니까? – criticalfix

+0

사실, OP가 원하는 것이 확실하지 않습니다. 나는 그 사건에 대한 적절한 해결책이라고 생각하는 것으로 그것을 편집했다. 귀하의 솔루션은 괜찮은 것 같아요, 그리고 청소기 (비록 내가보기 엔 덜 읽을 수있는 원인을 조인의 큰 팬이 아니기 때문에), 그래서 그것을 upvote 것입니다 ... –

+0

@criticalfax. 그게 바로 - columnB의 항목 값이 columnA의 값에 부분 문자열로 나타나면 내 결과에서 columnA의 값을 원하지 않습니다. 하지만 원래의 설명에서 큰 실수를 저질렀습니다. 두 열은 같은 테이블에 없습니다. 내가 왜 그들이 그렇게 생각하는지 모르겠다. 원본 설명을 수정하거나 새로운 도움말 요청을 작성하여 여기에서 링크하는 것이 올바른지 확실하지 않은 시점입니다. – Chris

3
SELECT DISTINCT columnA 
FROM tableA as O 
WHERE not exists (select 42 from TableA where O.ColumnA like ColumnB)