2014-07-19 2 views
0

티켓, 티켓 사용자 및 사용자 테이블이 3 개 있습니다. 내 문제는 사용자 테이블에 나는 2 가지 유형의 사용자가있다 : 요청자와 해결 자 : 유형 1과 2. 요청자 (있는 경우)가 여러 개일 수 있고 해결자가있는 경우 여러 개가 될 수있는 티켓을 선택하려고한다.). 사용자 사례 또는 하위 쿼리?

SELECT 
    t.id, t.description, 
    (u.id where u.type = 1) AS requester, 
    (u.id where u.type = 2) AS solver 
FROM 
    tickets t 
INNER JOIN 
    tickets_users tu ON t.id = tu.ticket_id 
INNER JOIN 
    users u ON tu.user_id = u.id 

는 분명히 문제가 해결되지 않습니다

나는의 라인에서 뭔가를 생각하고 있어요.

는 다음과 같다 :

티켓 :

ID  Description  
1  Description 1 
2  Description 2 

Tickets_users

ID  Ticket_ID User_id Type 
1   3   4   1 
2   5   8   2 

사용자

ID  Name 
1   John 
2   Mary 

감사합니다,

한편

은 내가 조인 절에 서브 쿼리를 사용하여 해결책을 찾을 수 있다고 생각하지만, 나에게 그것은 초보 같습니다

SELECT 
    t.id, t.name AS ticket_name, type1.users_id AS requester, 
    type2.users_id AS solver 
FROM 
    tickets t 
INNER JOIN 
    (SELECT users_id, tickets_id 
    FROM tickets_users 
    WHERE TYPE = 1) type1 ON t.id = type1.tickets_id 
INNER JOIN 
    (SELECT users_id, tickets_id 
    FROM tickets_users 
    WHERE TYPE = 2) type2 ON t.id = type2.tickets_id 
+0

테이블에 두 번 가입하거나 MAX (CASE WHEN ... THEN ... END) – Strawberry

답변

0

이 같은이어야한다.

SELECT 
    t.id, t.description, u.id, userType 
    CASE WHEN u.type = 1 THEN 'requester' ELSE 'solver' END 
FROM 
    tickets t 
    INNER JOIN tickets_users tu ON t.id = tu.ticket_id 
    INNER JOIN users u ON tu.user_id = u.id 

위의 예제가 작동하지 않는 경우 sqlfiddle을 제공하십시오. 당신이 말할 수와 조인

,

SELECT 
    t.id, t.description, requesters.id, solvers.id 
FROM 
    tickets t 
    INNER JOIN tickets_users tu ON t.id = tu.ticket_id 
    LEFT JOIN users requesters ON (tu.user_id = requesters.id AND requesters.type=1) 
    LEFT JOIN users solvers ON (tu.user_id = solvers.id AND solvers.type=2) 

, 사용자 테이블 (요청자로 추가 조건 솔버로) 두 번에 합류한다. LEFT JOIN이 사용되는 이유는 리퀘 스터가 없거나 솔버가없는 레코드가있는 경우 INNER JOIN은 리퀘 스터와 솔버가있을 때까지 전체 레코드를 완전히 무시하기 때문입니다.

+0

Thaks,이 작업은 가능하지만 원하는 출력이 아닙니다. 나는 사용자 열의 Type 열을 2 열로 나누고 자한다 : 하나는 요청자를위한 것이고 다른 하나는 해결자를위한 것이다. TicketID, TicketDescription, RequesterID, SolverID와 같은 것입니다. – user3856829

+0

왼쪽 조인을 얻지 못했습니까? 어떤 테이블이 결합됩니까? 사용자 테이블은 하나 뿐이며 사용자는 유형에 따라 요청자 또는 해결 자입니다. – user3856829

+0

추가 된 설명을 확인하십시오. –