2011-09-05 7 views
3

Gang, GangMember 및 Neighborhood의 세 가지 테이블이있는 SQL Server 데이터베이스가 있습니다. 이 테이블은 다음과 같이 구성되어 있습니다 :SQL - 왼쪽 조인과 내부 조인을 함께 사용

Neighborhood 
------------ 
ID (non-null) 
Name (non-null) 

Gang 
---- 
ID (non-null) 
Name (non-null) 
NeighborhoodID (nullable) 

GangMember 
---------- 
ID (non-null) 
GangID (non-null) 
Name (non-null), 
Position (nullable) 

내가 갱단 멤버 (예 그들은 여러에 속할 수)에 속하는 모든 갱을 얻을 필요가있다. 이웃이 있다면, 나는 그걸 돌려 줄 필요가있다. 나는의 형태로 설정 내 결과 원하는 : gang.name, neighborhood.name, member.position을

지금까지 내가 여기 왔 : 갱은이 없을 수 있습니다

SELECT 
g.[Name], 
'' as 'Neighborhood' /* This what I don't know how to do */ 
m.[Position] 
FROM 
    [Gang] g, 
    [GangMember] m 
WHERE 
    m.[GangID]=g.[ID] 

때문에 이웃, 나는이 쿼리를 어떻게 완료 해야할지 모르겠다. 누군가 나를 도울 수 있습니까? 감사! 다음과 같이 왼쪽을 할 수

SELECT 
    g.[Name], 
    n.[Name] as 'Neighborhood', 
    m.[Position] 
FROM 
    [Gang] g INNER JOIN [GangMember] m ON m.[GangID]=g.[ID] 
    LEFT OUTER JOIN [Neighborhood] n ON g.[NeighborhoodID] = n.[ID] 
+0

당신이 모델의 일부 업데이트 이상 및 기타 문제가있는 것 같아요. 나는 갱단 멤버가 무엇인지 제대로 정의했다고 생각하지 않습니다. "갱단 멤버가 속한다 (예, 복수 회원에 속할 수 있음)"는 모순 된 것처럼 보입니다. 아마도 당신은 같은 사람이 같은 갱단의 일원이 될 수 있다는 것을 의미합니까? 그렇다면 다른 이름으로 (또는 같은 이름으로) 자신을 보호 할 수있는 다른 갱단에 알려질 수 있습니다. 갱단과 반 조직적 성격 사이에서 경쟁의 전통을 알면 어느 기관이 갱단원 ID의 신뢰할 수있는 출처가 될지 상상하기 어렵습니다. – onedaywhen

+0

명확히하기 위해 : 나는 당신의'GangMember' 테이블을 그 사람을 모델링하기위한 하나의 테이블 (합법적 인 이름, 지문, DNA 등과 같은 식별자를 가질 수있는 테이블)과 두 모델 간의 관계를 모델링하기위한 두 개의 테이블로 나눌 필요가 있다고 생각합니다. 사람과 그녀의 갱 (나는 '이름'으로 알려진 것 이외의 어떤 식별자도 상상할 수 없다.). – onedaywhen

답변

5

이 시도

SELECT 
g.[Name], 
n.name as 'Neighborhood' /* This what I don't know how to do */ 
m.[Position] 
FROM 
    [Gang] g 
    INNER JOIN [GangMember] m ON m.[GangID]=g.[ID] 
    LEFT JOIN Neighborhood n ON n.Id = g.NeighborhoodID 
1
select G.Name as GangName, 
     N.Name as Neighborhood, 
     GM.Name as MemberName, 
     GM.Position as MemberPosition 
from Gang as G 
    inner join GangMember as GM 
    on G.ID = GM.GangID 
    left outer join Neighborhood as N 
    on G.NeighborhoodID = N.ID 
0
SELECT TOP (100) PERCENT 
    DemographicTable.Name, 
    ReferralTable.Code, 
    ReferralTable.Date_Termed, 
    ReferralTable.Referral_date, 
    (
     SELECT Date_Accepted 
     FROM CaseTable 
     WHERE (ReferralTable.ID = DemographicTable.ID_Number) 
      AND (Date_Accepted <> '') 
      AND (DateTermed > '2013-11-01' OR DateTermed = '') 
    ) AS Start, 
    (
     SELECT DateTermed 
     FROM CaseTable AS CaseTable_1 
     WHERE (ReferralTable.ID = DemographicTable.ID_Number) 
      AND (Date_Accepted <> '') 
      AND (DateTermed > '2013-11-01' OR DateTermed = '') 
    ) AS Term 
FROM ReferralTable 
INNER JOIN DemographicTable 
    ON ReferralTable.ID = DemographicTable.ID_Number 
    AND ReferralTable. Referral_date > '2012-12-01' 
    AND ReferralTable. Code = 'JTC' 
ORDER BY ReferralTable. Referral_date 
관련 문제