2012-01-24 2 views
3

잘하면이 쉬운 질문이 될 것입니다!SQL Join 여러 개의 일대 다 쿼리? 또는 many-to-many?

나는 '클라이언트 (들)'테이블과 개별 '이름'테이블이라는 두 개의 테이블을 가지고있다. 기본은 클라이언트가 하나 또는 두 개의 (최대) 이름을 가질 수 있다는 것입니다. 나는 각각의 '이름'이 다른 제목을 가질 수 있도록 이렇게 구조화했습니다. 테이블은 다음과 같습니다

clients 
+------------+-------------+------------+ 
| clientID | nameID1  | nameID2 | 
+------------+-------------+------------+ 
|   1 | 1   | 2   | 
|   2 | 3   |   | 
|   3 | 4   |   | 
+------------+-------------+------------+ 


names 
+------------+-------------+------------+------------+ 
| nameID  | surname  | initials | titleID | 
+------------+-------------+------------+------------+ 
|   1 | Banks  | P   | 1   | 
|   2 | Smith  | W   | 2   | 
|   3 | Wilson  | BT   | 2   | 
|   4 | Jefferson | JP   | 3   | 
+------------+-------------+------------+------------+ 
titleID가에서 검색

... 예를 들면 그래서

titles 
    +------------+-------------+ 
    | titleID | titleName | 
    +------------+-------------+ 
    |   1 | Mr   | 
    |   2 | Mrs   | 
    |   3 | Miss  | 
    +------------+-------------+ 

씨가 P 은행 '&'부인 W 스미스

문제는 I이다 = 1 된 ClientID 위의 답변을 얻으려는 질문에 익숙하지 않습니다.

내가 시도 할 수 없습니다

SELECT 
clientID, names.surname, names.initials, titleName 
FROM clients, names, titles 
WHERE titleID = titleID AND 
NameID1 = nameID AND 
NameID2 = nameID 

를 내가 제대로 찾기 위해 쿼리에서 테이블을 조인 어떻게, 예를 들어, clientID 1 = Mr P Banks '&' Mrs W Smith

+0

미안하지만 무엇이 문제입니까? –

+0

@AndySkirrow 명확하지 않은 경우 죄송합니다. 예를 들어 쿼리에서 테이블을 올바르게 조인하는 방법을 알고 싶습니다. clientID 1 = Mr P Banks '&'Mrs W Smith – wonderswan

답변

2

당신은 두 번 이름 (및 제목) 테이블에 가입해야합니다, 한 번 nameID1, 한 번 nameID2. 클라이언트가 적어도 하나의 이름을 가져야한다고 가정 했으므로 nameID1은 INNER JOIN이고 namedID2는 선택 사항 (null 가능)이므로 LEFT OUTER JOIN입니다.

SELECT c.clientID, n1.surname, n1.initials, t1.titleName, n2.surname, n2.initials, t2.titleName 
FROM clients c 
INNER JOIN names n1 ON nameID1 = n1.nameID 
INNER JOIN titles t1 ON n1.titleID = t1.titleID 
LEFT OUTER JOIN names n2 ON nameID2 = n2.nameID 
INNER JOIN titles t2 ON n2.titleID = t2.titleID 
+0

그것은 훌륭합니다. 내부 조인을 살펴 보는 것이 좋습니다. 감사합니다. – wonderswan

+0

그 질문에 더하여, 모든 '고객'을 표시 할 수 있습니까? 그 순간 쿼리는 두 개의 '이름'이있는 클라이언트만을 보여줍니다. – wonderswan

+0

생각해 봅니다 - 나도 LEAD OUTER JOIN ON nameID1 = n1.nameID 또한 모든 클라이언트 레코드를 봅니다 (심지어 Null nameID2) – wonderswan

관련 문제