2010-07-08 3 views
9

나는 user 테이블과 complaint 테이블을 가지고있다.다른 테이블에 두 번 같은 테이블을 합치는 것

[opened_by] [complaint_text] [closed_by] 
(user_id)   (text)   (user_id) 
(user_id)   (text)   (user_id) 
(user_id)   (text)   (user_id) 

모든 사용자, 모두 불평불만 해결 프로그램이 테이블 user에 있습니다

complaint 표는 다음과 같은 구조를 가지고 있습니다.

두 열에 대한 사용자 이름을 표시하는 쿼리는 어떻게 작성합니까?

SELECT user.username, complaint.complaint_text 
FROM complaint 
LEFT JOIN user ON user.user_id=complaint.opened_by 

하지만 난 그렇게 모두 _by 열 사용자 이름이 아닌 ID를 보여 작성하는 방법을 모르는 :

이 나에게 하나를 제공합니다.

SELECT opener.username as opened_by, complaint.complaint_text, closer.username as closed_by 
FROM complaint 
LEFT JOIN user as opener ON opener.user_id=complaint.opened_by 
LEFT JOIN user as closer ON closer.user_id=complaint.closed_by 

답변

31
SELECT 
    complaint.complaint_text, 
    A.username, 
    B.username 
FROM 
    complaint 
    LEFT JOIN user A ON A.user_id=complaint.opened_by 
    LEFT JOIN user B ON B.user_id=complaint.closed_by 
+0

가능한 경우 쉽게 읽기 쉽고 효율적으로 하위 쿼리를하는 것이 좋습니다. –

+0

'불만 사항'x''''''''의 직교 제품을 제공하지 않겠습니까? – NeverEndingQueue

+0

@NeverEndingQueue - 각각의 JOIN에 조건이 있기 때문에 그렇지 않습니다. – potatopeelings

0
SELECT user1.username AS opened_by_username, complaint.complaint_text, user2.username AS closed_by_username 
FROM user AS user1, complaint, user as user2 
WHERE user1.user_id = complaint.opened_by 
AND user2.user_id = complaint.closed_by 

다시 별칭을 사용하여 가입은

0

사용이 쿼리 (사용자 2 물건 같이 사용자에 대해 무엇 먹으 렴) 쉽게 이해할 수 있습니다 ...

SELECT (SELECT name 
      FROM user 
      WHERE user_id = opened_by) AS opener, 
     (SELECT name 
      FROM user 
      WHERE user_id = closed_by) AS closer, 
     complaint_text 
    FROM complaint; 

성능 관련 사항이있는 경우 하위 쿼리는 일반적으로 쿼리 최적화 프로그램에서 다시 작성됩니다.

1

내가 찾을 나는이 하위 쿼리를 선호 :

관련 문제