2013-03-01 5 views
0

SQL 쿼리는 태그와 태그가 지정되지 않은 항목을 반환하는 많은 항목에 태그가없는 모든 항목과 태그를 나열하는 쿼리를 작성하십시오. 둘 다 할 수있는 쿼리를 찾을 수 없습니다.태그 : 내가 3 개 테이블이 어디 태그를 통합되고 'toxi'스키마 갔다 데이터베이스를 짓고 있어요

다음 쿼리는 이름이 태그 인 항목을 가져 오지만 태그가있는 항목 만 가져옵니다. 그들이 태그 된 경우

SELECT Items.Item, Tags.Tag 
FROM Items INNER JOIN 
(Tags INNER JOIN TagMap ON Tags.ID = TagMap.TagId) 
ON Items.ID = TagMap.ItemId; 

다음 쿼리는 항목과 TagIDs 저 모두를 얻을 수 있지만, 나는 하나의 쿼리에서 TagNames에 그 TagIDs를 변환하는 다음 단계로 얻을 수없는 것.

SELECT [Items].Item, [TagMap].TagId 
FROM Items LEFT JOIN TagMap ON [Items].ID=TagMap.ItemId; 

MSDN

는 "내부 조인 다중 테이블 조인,하지만 INNER가 외부 조인 내부에 중첩 될 수 없습니다 JOIN을 내부에서 외부 중첩 될 수 있습니다 조인"라고하지만 조인 두 개의 중첩의 방법을 찾을 수 없습니다 오류가 발생하지 않습니다. 내가 볼 수있는 한 LEFT JOIN이 항목에 있어야합니다.

개념 증명 데이터베이스가 내 컴퓨터에 이미 설치되어 있기 때문에 Access에서 작업하고 있습니다. 아마 어느 시점에서 SQL Server로 전환 할 것입니다.

답변

1

은 당신 가까이되었다 - 단지 1 추가 LEFT JOIN 추가 할 필요가 : 당신이 MS 액세스를 사용하고 있기 때문에

SELECT [Items].Task, [TagMap].TagId, Tags.TagName 
FROM Items 
    LEFT JOIN TagMap ON [Items].ID=TagMap.TaskId 
    LEFT JOIN Tags ON TagMap.TagID=Tags.TagID 

, 당신이 당신의 조인 괄호를 사용해야합니다 - 이런 일이 가까이 있어야 :

SELECT [Items].Task, [TagMap].TagId, Tags.TagName 
FROM (Items 
    LEFT JOIN TagMap ON [Items].ID=TagMap.TaskId) 
    LEFT JOIN Tags ON TagMap.TagID=Tags.TagID 
+0

감사합니다. 그게 효과가 있었어. 내가 물어볼 수 있다면, 왜 다른 LEFT JOIN인가? 나에게 태그의 매핑은 실제로 내부 조인이어야하는 것처럼 보였다. – alwayssummer

+0

@alwayssummer - np, 기꺼이 도와 드리겠습니다. TagMap 및/또는 Tags 테이블에 레코드가없는 경우 LEFT JOIN을 사용하려고합니다. 이렇게하면 Items.Task 필드가 항상 나타나지만 잠재적으로 TagId 및/또는 TagName 필드에 대한 NULL 값을받습니다 (예를 들어). 행운을 빌어 요! – sgeddes