2014-01-16 2 views
1

이 질문은이 사이트에서 여러 번 여러 번 사용되기 때문에 사과 드리지만 구현을 시도한 솔루션 중 아무 것도 올바르게 작동하지 않는 것으로 보입니다. 나에게 옳은 대답을주는 질문에 대답했다.Access/SQL Server 2008 Join Like Like Like

나는 동료를위한 액세스 작업을하고 있지만 일단 서버를 설정하면 나중에 SQL에있을 것입니다. Like를 사용하여 두 개의 테이블을 조인하려고하는데, 이는 제대로 작동하지 않는 것을 제외하고는 충분히 쉽습니다. 첫째, 각 테이블의 예 :

T1 나는 내가 원하는대로 쿼리를 수행 할 수 있도록, 기본적으로 항목처럼 결합하는 것을 시도하고있다

+------+-----------------------------------------+------------+ 
|DIVID |DMT Bank Name       |5 Digit Code| 
+------+-----------------------------------------+------------+ 
|647531|800/900 NETWORK, Optimus #1 - 800 NETWORK|55555  | 
+------+-----------------------------------------+------------+ 
|647532|800/900 NETWORK, Optimus #2 - 800 NETWORK|55555  | 
+------+-----------------------------------------+------------+ 
|647533|800/900 NETWORK, Optimus #3 - 800 NETWORK|55555  | 
+------+-----------------------------------------+------------+ 

+-------------------------+--------------------------------------------------------------+--------------+ 
|LOCATION_CG_LOC_LEGACY_ID|LOCATION_CODE_DESC           |PI_LOW_SIDE_MW| 
+-------------------------+--------------------------------------------------------------+--------------+ 
|55555-Opt01    |Autobot Transformer, 800/900 NETWORK, Optimus #1 - 800 NETWORK|5    | 
+-------------------------+--------------------------------------------------------------+--------------+ 
|55555-Opt02    |Autobot Transformer, 800/900 NETWORK, Optimus #2 - 800 NETWORK|6    | 
+-------------------------+--------------------------------------------------------------+--------------+ 
|55555-Opt03    |Autobot Transformer, 800/900 NETWORK, Optimus #3 - 800 NETWORK|6.5   | 
+-------------------------+--------------------------------------------------------------+--------------+ 

T2. 지금 그러나 그러나, 나는 모두를 선택하는 것이 좋다. 난 그냥 같은 항목을 결합해야합니다. T1에서 첫 번째 열 [LOCATION_CG_LOC_LEGACY_ID]은 반복되지 않는 고유 항목입니다. T2에서 [DIVID]는 반복되지 않는 고유 항목입니다. 나는

SELECT * 
FROM [Data Table 1] INNER JOIN [Data Table 2] ON (([t1].[LOCATION_CODE_DESC] Like [t2].[DMT Bank Name] 
OR [t2].[DMT Bank Name] Like [t1].[LOCATION_CODE_DESC]) AND ([T1].[LOCATION_CG_LOC_LEGACY_ID] Like [t2].[5 Digit Code] or [t2].[5 Digit Code] Like [T1].[LOCATION_CG_LOC_LEGACY_ID])); 

지금, 나는 그 조인 조건의 후반에 문제가 있다고 생각하여 그들을 함께 쿼리하려고했지만, 심지어 첫 번째 절반을 사용하여, 나는 ZERO 결과를 얻을 수 있습니다. 그러나 각 테이블의 중간 열을 편집 한 다음 해당 조건의 전반부를 사용하면 완벽하게 작동합니다. 다시 말해, 열을 정확하게 일치 시키면 쿼리가 작동하는 것처럼 보입니다.이 쿼리는 "like"조인을 사용하여 전체 지점을 무시합니다.

아직 SQL Server에서이 작업을 시도하지는 않았지만 어쨌든 최소한 개념 증명으로 작업해야합니다. 멋진 숙녀 여러분이 나를 도와 줄 수있는 어떤 도움도 감사 할 것입니다. 비록 그것이 내가 실례로 놓친 다른 실을 가리키고있다해도.

마지막으로 가능하면 VBA 사용을 피하려고합니다.

답변

0

같은 형식으로 자세히 보면. 여기

SELECT * 
FROM t1 
INNER JOIN t2 
ON [t1].[LOCATION_CODE_DESC] Like '%' + [t2].[DMT Bank Name]+ '%' 
AND [T1].[LOCATION_CG_LOC_LEGACY_ID] Like '%' + CONVERT(varchar(50),[t2].[5 Digit Code])+ '%'; 

바이올린된다 : http://sqlfiddle.com/#!3/dc2b9/10/0

또한 호환성을 위해 어떤 종류의 varcharint로 변환해야합니다 여기에 와일드 카드 쿼리입니다.

이와 같이, 특히 변환을 사용하면 join을 수행하면 대용량 데이터 세트의 성능이 저하 될 수 있습니다.

편집 : MS 액세스

MS 액세스하면 문자열로 INT를 변환 할 때 다른 일, 다른 와일드 카드를 사용합니다. 액세스 권한이 없으므로 테스트 할 수 없지만 MS 액세스 쿼리는 다음과 같이 보일 것입니다.

SELECT * 
FROM t1 
INNER JOIN t2 
ON [t1].[LOCATION_CODE_DESC] Like '*' & [t2].[DMT Bank Name] & '*' 
AND [T1].[LOCATION_CG_LOC_LEGACY_ID] Like '*' & CStr([t2].[5 Digit Code]) & '*'; 
+0

이것은 달성하려는 대상에 매우 가깝지만 액세스에서 작동하지 않는 것 같습니다. 'FROM * 메뉴 [데이터 테이블 1] INNER ON [데이터 표 2] 가입 [데이터 표 1]. LOCATION_CODE_DESC] 추천'* '및 [데이터 표 2]. DMT 은행 이름] "* 'AND [데이터 표 1]. [LOCATION_CG_LOC_LEGACY_ID]'* '및 CVar ([데이터 표 2]. [5 자리 코드])와 &'* ''와 같음 동일한 내용이 액세스로 변환됩니다. 나는 SQL에서 그것을 시도 할 것이다. 나는 거의 항상 문제가 있다는 것을 발견했다. – Mellvinbaker

+0

Access 쿼리는 내가해야한다고 생각했던 것과 같고 내가 다른 곳에서 찾은 것, 그리고 여전히 작동하지 않습니다. 그러나 SQL 쿼리는 완벽하게 작동합니다. 감사합니다. 필자는 액세스를 덜 튼튼하게하고 대신 동료에게 SQL Server를 사용하도록 조언합니다. 어쨌든 거의 항상 더 나은 옵션이므로 SQL Server를 사용하는 것이 좋습니다. – Mellvinbaker

0

이 시도하고 그렇지 않으면 본질적으로 평등 (=)에 대한 검사를하게

SQLSERVER에서 LIKE을 사용하는 경우는 % 와일드 카드를 추가 할 필요가
--MS SQL 
SELECT * 
FROM T1 
     Inner Join T2 on T1.[LOCATION_CG_LOC_LEGACY_ID] Like T2.[5 Digit Code] + '%' 

--MS ACCESS 
SELECT * 
FROM T1 
     Inner Join T2 on T1.[LOCATION_CG_LOC_LEGACY_ID] Like T2.[5 Digit Code] & '%'  
+0

내 실수.액세스에서 내 쿼리의 & '*'를 중단하지 않았으므로 ""대신 ""을 사용했습니다. 그러나, 나는 이것을 시도하고 결과를 얻는 동안, 나는 3 대신 9 개의 행을 얻는다. 또한, 1 대신에 두 조건을 기반으로 조인을 수행하는 방법 (IE 둘다 t2.c2와 t2.c2 및 t1). c3은 t2.c1과 비슷합니다. – Mellvinbaker

+0

당신은 2 가지 조건이 만 족해야 함을 의미합니다. – Jade