2011-03-09 3 views
0

예를 들어 나는MySQL의 JOIN 절에 조건을 넣을 수 있습니까?

join on p.match_id = o.match_id 

내가 대신 지정할 수 조인 다음했다고 가정이 p.match_id는 심지어

join on p.match_id = o.match_id - 1 

이다 그러나 경우는

join on p.match_id = o.match_id + 1 

I 홀수 인 경우 순차적 인 match_id가있어 연속적인 값이 하나의 일치를 표현합니다. 따라서 내가 필요로 주어진 match_id에 대한 상대를 해결하려면, 당신은 단지도 p.match_id 값에 가입하고자하는 경우 내 생각

+4

데이터가 필요한 경우 깊은 걱정이됩니다. –

+0

이 작업을 수행하는 데 어떤 논리가 있습니까? 당신은 대안 –

+1

에 대해 생각할 수 있습니다. 왜냐하면 순차적 match_id가 있기 때문에 연속 값이 단일 일치를 나타 내기 때문입니다. 그러므로 주어진 match_id에 대해 상대방을 해결하려면 위의 내용이 필요합니다. – deltanovember

답변

4

그것을 있도록 편집 CASE를 사용하지 않습니다. 부질의는 하나의 필드를 갖는 테이블을 반환한다 : matchid (match_id가 짝수이면 match_id + 1, match_id가 홀수 일 때 match_id-1과 같다).

SELECT match_id 
    , ((match_id + 1) DIV 2) AS pair 
    FROM p 
; 

그것은 당신에게 줄 것이다 : 당신은 당신이 하나 개의 테이블과 2 개 sequentials ID를 상대 한 쌍을 사용하고 있는지 언급 때문에

SELECT matchid 
    FROM (SELECT match_id + 1 - 2*(match_id % 2) 
       AS matchid 
      FROM p 
     ) AS p2 
    JOIN o 
    ON p2.matchid = o.match_id 
; 

은 또한 하위 쿼리 또는보기로 다음을 사용할 수 있습니다

| match_id | pair | 
|  1 | 1 | 
|  2 | 1 | 
|  3 | 2 | 
|  4 | 2 | 
|  5 | 3 | 
|  6 | 3 | 
+0

영리하고 우아한 덕분에! – deltanovember

+1

@deltanovember : 여기서'pair '는 본질적으로 게임 (일치) ID이며, 일반적으로 외래 키 여야합니다. 그러나 그것은 당신의 죽입니다. 자신의 숟가락을 사용하십시오 (또는 당신에게 가장 적합한 것을 골라주십시오). :) –

1

은, 당신이해야 위가 약간 다르게 : 마찬가지로

join on p.match_id = o.match_id and p.match_id = p.match_id div 2 * 2 

이상한 사람들이어야합니다.

join on p.match_id = o.match_id and p.match_id = p.match_id div 2 * 2 + 1 

다른 사람들과 마찬가지로, 왜 내가 필요한지 궁금합니다. id 열은 id 열만입니다. 일반적으로 id 열의 값의 특정 특성에 관심을 가져서는 안됩니다.

JOIN ON p.match_id = o.match_id AND o.match_id % 2 = 0 

을 어디서 두번째 테이블의 ID가 홀수 : 당신이 두 번째 테이블의 ID도 단지입니다 서로 하나의 테이블에 가입하려면

4

이 시도

JOIN ON p.match_id = o.match_id AND o.match_id % 2 = 1 
+0

안녕하세요, 내 솔루션보다 훨씬 좋습니다! 내가 왜 그렇게 생각하지 않았어? –

관련 문제