2014-05-01 2 views
0

3 개의 관련된 테이블의 값을 하나로 연결하려고합니다.3 개의 관련된 테이블을 하나에

테이블 : U

╔════╦══════════════╦ 
║uid ║ name  ║ 
╠════╬══════════════╣ 
║ 1 ║ admin  ║ 
║ 92 ║  a  ║ 
╚════╩══════════════╝ 

테이블 : 나는 3 개 테이블이 N을

╔════╦══════════════╦ 
║uid ║  nid  ║ 
╠════╬══════════════╣ 
║ 1 ║  152  ║ 
║ 92 ║  153  ║ 
╚════╩══════════════╝ 

테이블 : R

╔════╦══════════════╦ 
║ id ║ user_id ║ 
╠════╬══════════════╣ 
║152 ║  92  ║ 
║153 ║  1  ║ 
╚════╩══════════════╝ 

내가 표시 할 것

╔════╦══════════════╦════════╗ 
║ id ║  name1 ║ name2 ║ 
╠════╬══════════════╬════════╣ 
║152 ║  admin ║ a ║ 
║153 ║  a  ║ admin ║ 
╚════╩══════════════╩════════╝ 

나는 같은 SQL 쿼리

SELECT nid id, name name1, user_uid name2 
FROM u u, n n, r r 
WHERE u.uid = n.uid 
AND n.nid = r.id 

을 시도하지만 1,92 같은 테이블 NAME2 값만에서 돌아갑니다. 당신이 테이블에 두 번째 참조가 필요 그렇다면 U.

U가 제공하는 관리자에 그, A는

+0

표 'R'과 'N'은 서로 다른 열 이름을 가진 사본으로 보입니다. 아마도 네이밍을 향상 시키면 더 명확 해집니다. – Richard

+0

테이블 사이의 관계는 무엇입니까? – Nazgul

+0

표 N 및 R은 상이하다. 내가 설명한대로 모든 것을 연결하여 결과를 얻을 수 있습니까? – user3582116

답변

4

내가 제대로 질문을 이해한다면, 테이블의 user_id 열 R은 테이블의 uid 열을 참조를 변경하는 방법 name2. 나는 이것을 다음과 같이 쓸 것입니다 :

select n.nid, u1.name as name1, u2.name as name2 
from u u1 
    inner join n on u1.uid = n.uid 
    inner join r on n.nid = r.id 
    inner join u u2 on r.user_id = u2.uid 

저는 테이블 U를 두 번 사용했습니다 - name1을 제공하기 위해 한 번, name2를 제공하기 위해 두 번 사용했습니다.

+1

이것은 실제로 ANSI 표준 SQL입니다. 이것은 _any_ RDBMS에서 작동해야합니다. –

+0

감사합니다. 주의 사항을 삭제하도록 수정했습니다. – aucuparia

관련 문제