2014-04-08 2 views
0

나는 사건 소프트웨어가있다. 이벤트에 등록한 개인 테이블과 이벤트에 등록한 팀 테이블이 있습니다. 개인과 팀 모두 동일한 이벤트에 등록 할 수 있습니다. 나는 또한 셔츠 테이블을 가지고있다. 이 테이블은 셔츠를 개인 또는 셔츠와 팀에 연관 짓고 팀의 셔츠는 여러 행을 가질 것입니다. 왜냐하면 팀이 1 인 이상이기 때문입니다. 여기 구조가 있습니다. 다른 열 이름을 가진 3 개의 표를 결합하십시오

Individuals 
-id 
-event_id 
-member_id 

Teams 
-id 
-event_id 
-team_name 

shirts 
-id 
-entity_id 
-shirt_id 
-is_team 

는 처음에는 별도의 개별 셔츠 테이블과 별도의 팀 셔츠 테이블을했고 아무 소용 union all로했습니다. 이제는 개인 ID 또는 팀 ID 인 entity_id을 가진 단일 셔츠 테이블과 어떤 테이블을 지정하는 is_team이 있습니다.

event_id을 기반으로하는 개인 및 팀용 셔츠를 어떻게 든 구하려고 join과 힘들어하고 있습니다. 나는 모든 개인 셔츠와 모든 팀 셔츠를 보여줘야 할 것입니다.

내 다른 테이블 구조에 대해 union 문을 붙여 넣을 수는 있지만 join에 대해서는 아무 것도 표시 할 수 없습니다. 나는 올바른 방향으로 나아가는 단계를 찾고 있습니다.

+0

필요? –

+0

그게 문제라고 생각합니다. 개인은 한 사람이므로 셔츠 테이블에는 각각 1 행씩 표시됩니다. 팀은 2 명 이상이므로 셔츠 테이블에는 각 팀원마다 행이 있습니다. entity_id는 개인 ID 또는 팀 ID입니다. – Naterade

+0

이고 셔츠 테이블의 is_team은 팀에 대한 항목이 0 인 경우 설정되며 팀의 경우 1입니다. –

답변

1

이 당신은 아마 일반 키를 내기 무엇 즉 팀 셔츠 개인과 셔츠 사이의 관계는 무엇인가

select s.id, 
s.shirt_id, 
case 
when s.is_team = 0 then i.member_id 
else 
t.team_name 
END 
as entity 
from shirts s 
left join Individuals i on i.id = s.entity_id AND s.is_team = 0 
left join Teams t on t.id = s.entity_id AND s.is_team = 1 

http://www.sqlfiddle.com/#!2/cbb687/5

+0

그게 효과가있어, 고마워. 그때 팀으로 그룹화해야한다면 여전히 테이블 구조가 사용됩니다. 근본적으로 당신은 2 개의 분리 된 셔츠 테이블 (개인의 셔츠를위한 하나와 노동 조합을 사용하고있는 팀 셔츠를위한 하나) 이상 이것을 추천 할 것이냐? – Naterade

+0

네, 더 정상화가 훨씬 낫고 쉽게 UNION을 사용할 수 있습니다. Thats 더 나은 접근 및 셔츠 테이블은 그런 복잡한 관계에서 자유 롭다. –

+0

아, 그래, 고마워. 내가 노조와 별거 테이블을 볼거야. – Naterade

관련 문제