2016-06-10 1 views
1

두 열 모두 중요한 경우 tinyint입니다.부분 열 데이터에서 SQL 조인

Version 
-------- 
111115 
222226 
333337 

표 2

ID Year 
-------- 
5 2015 
6 2016 
7 2017 

나는 그것이 테이블의 버전 필드의 마지막 값이 동일한 경우는 표 2에서 ID에 가입해야 1.

버전 111115는 ID 5에 가입합니다.이 항목을 선택하는 방법은 알고 있지만 가입은 알고 있습니다. 가능한가? 결과 :

111115 5 2015 

TIA!

+1

이지만, 성능 히트가 있습니다. 그래서 원하는 경우 SUBSTRING (table1.Version, len (version) -1, 1) = Table2.ID에 참여할 수 있습니다. 확률은 느릴 것입니다. 더 좋은 방법은 임시 테이블에이 부분 문자열과 버전을 선택하고 Table2에 결합하는 것입니다. –

+0

9보다 큰 TABLE2.ID의 값을 가지게됩니까? 지금까지는 아무도 그 상황을 해결하지 못했습니다. –

답변

1

당신은이 작업을 수행 할 RIGHT() 기능을 사용할 수 있습니다 : 아마 생각이 아주 많은 일을하는 것을 피하기 것

SELECT * 
FROM Table1 A 
INNER JOIN Table2 B on RIGHT(A.Version,1) = B.ID 

. 이것은 잘못된 데이터베이스 설계입니다. 아마 표 1에 열 ID을 추가하고, 사용 : 그들은 모두 정수이기 때문에

UPDATE Table1 
SET ID = RIGHT(Version,1) 
+0

그게 바로 내가 필요한 것입니다. 고마워요! – Joshua

+0

@ Joshua 문제 없습니다, 건배 –

1

, 당신은 나머지 연산자를 시도 할 수 있습니다. 그것은 나눗셈 후에 나머지를 취한다. 그래서 111115 % 10 당신이 필드에 대한 모든 변경에 가입 할 수 있습니다 5.

SELECT * 
FROM Table1 t1 
INNER JOIN Table2 t2 on t1.Version % 10 = t2.ID 
0
Declare @tblTest as table 
(
    id INT, 
    yearName INT 
) 


Declare @tblVersion as table 
(
    VersionNo INT 
) 

INSERT INTO @tblTest values(5,2015) 
INSERT INTO @tblTest values(6,2016) 
INSERT INTO @tblTest values(7,2017) 

INSERT INTO @tblVersion values(111115) 
INSERT INTO @tblVersion values(111116) 
INSERT INTO @tblVersion values(111117) 


select 
*,RIGHT(VersionNo,1) 
from @tblVersion 

SELECT 
* 
FROM @tblTest T1 
LEFT JOIN (SELECT RIGHT(VersionNo,1) AS VersionId,VersionNo FROM @tblVersion) T2 ON T2.VersionId=T1.id