같은 테이블에 여러 명이 끼지 않도록 하려면 어떻게 해야 할까요?
무리
id team1_id team2_id
1 1 2
2 3 1
팀
id name
1 aaa
2 bbb
3 ccc
스키마를 변경하지 않고 다중 가입을 회피할 수 있습니까?아니면 스키마를 변경하여 이를 개선할 필요가 있습니까?한 그룹당 두 팀밖에 없을 것이다.
예상:
id team1_name team2_name
1 aaa bbb
2 ccc aaa
복수의 조인을 회피하는1가지 방법은 조건부 집약을 실행하는 것입니다.
select
g.id,
max(case when t.id = g.team1_id then t.name end) team1_name,
max(case when t.id = g.team2_id then t.name end) team2_name
from groups g
inner join teams t on t.id in (g.team1_id, g.team2_id)
group by g.id
이렇게 하면 새로운 열이 추가되면 쿼리를 쉽게 확장할 수 있습니다.groups
테이블, 실제로는 가입 솔루션보다 퍼포먼스가 뛰어나다고는 보증할 수 없습니다.이는 데이터 분포에 따라 달라집니다.퍼포먼스가 중요한 경우 두 솔루션을 실제 데이터와 비교하여 테스트해야 합니다.
Join 솔루션과의 또 다른 중요한 차이점은 이 쿼리는 실제로 팀 ID가 이 쿼리의 일부라는 것을 보증하지 않는다는 것입니다.groups
테이블은 모두 에서 사용할 수 있습니다.teams
table (테이블을 추가해야 합니다)having
절)을 참조해 주세요.사용 사례에 따라 원하는 경우와 그렇지 않을 수 있습니다.
이거 드셔보세요
Select id, max(case when
g.id=t.team1_id then
g.name end),
max(case when
g.id=t.team2_id then
g.name end)
From groups g right join
Teams t on
g.id=t.id
언급URL : https://stackoverflow.com/questions/59304482/how-to-avoid-multiple-joining-the-same-table
'programing' 카테고리의 다른 글
jQuery를 사용하여 부트스트랩 모달 창을 여는 방법 (0) | 2022.09.21 |
---|---|
코드 시그니터 - 입력 파일이 지정되지 않았습니다. (0) | 2022.09.21 |
PHP의 다차원 배열에서 중복된 값을 제거하는 방법 (0) | 2022.09.21 |
Vue 유닛 테스트 - vue-test-utils 마운트를 사용할 때 Import된 서비스를 조롱합니다. (0) | 2022.09.21 |
mysqldump를 시도할 때 "mysqldump 변수 'key_buffer_size=256M"이 표시됩니다. (0) | 2022.09.21 |