programing

같은 테이블에 여러 명이 끼지 않도록 하려면 어떻게 해야 할까요?

newsource 2022. 9. 21. 00:07

같은 테이블에 여러 명이 끼지 않도록 하려면 어떻게 해야 할까요?

무리

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테이블은 모두 에서 사용할 수 있습니다.teamstable (테이블을 추가해야 합니다)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