문제

나는 2 개의 테이블에서 일부 데이터를 함께 결합 시키려고하지만 여러 열에서 함께 연결하려고합니다. 예는 다음과 같습니다.

원천 테이블

id | desc | aaaa | BBBB |

표 2 테이블

id | 텍스트 | id1 | ID2 | ID3 |

여기서 id1, id2 및 id3 in 표 2 이드는 원천 테이블

결과를 얻는 쿼리를하고 싶습니다.

Table2.Text,
Source.Desc(ID1),
Source.AAAA(ID1),
Source.Desc(ID2),
Source.AAAA(ID2),
Source.Desc(ID3),
Source.AAAA(ID3)

나는 이것이 가입 일 것이라고 생각하지만, 구문을 올바르게 얻을 수는 없습니다 ... 아니면 노조와 더 나아질까요?

도움이 되었습니까?

해결책

모든 소스 테이블이 표 2에 채워진 것은 아니더라도 여전히 부분적으로 결과를 제공합니다.

SELECT
    t.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA
    FROM Table2                t
        LEFT OUTER JOIN Source s1 ON t.ID1 = s1.ID
        LEFT OUTER JOIN Source s2 ON t.ID2 = s2.ID
        LEFT OUTER JOIN Source s3 ON t.ID3 = s2.ID
    WHERE t.ID=@YourIDHere

다른 팁

당신은 단지 여러 조인을 사용할 수 있습니까? 예를 들어:

SELECT tb.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA
FROM Table2 tb
    INNER JOIN Source s1 ON tb.ID1 = s1.ID
    INNER JOIN Source s2 ON tb.ID2 = s2.ID
    INNER JOIN Source s3 ON tb.ID3 = s2.ID

소스 테이블에 세 번, 각 ID마다 하나씩 가입해야합니다. 또한 Unuion을 시도하여 어느 것이 더 나은지 확인할 수 있습니다.

이것은 나쁜 테이블 디자인 (정규화되어야 함)이며 가능한 경우 지금 변경하는 것이 좋습니다. 각 ID가 별도의 레코드로 shoudl bea 관련 테이블이 있으면 한 번 가입 할 수 있으며 코드를 작성하기가 훨씬 더 효율적이고 훨씬 쉽게 작성할 수 있으며 테이블 구조를 변경할 필요가 없으며 필요한 날을 모든 쿼리 할 필요가 없습니다. ID4.

세 가지 조인은 트릭을 수행해야합니다.

select A.*, coalesce(B1.Text,B2.Text,B3.Text,'') as Text
from Source A
inner join Table2 B1 on B1.ID1=A.ID
inner join Table2 B2 on B2.ID2=A.ID
inner join Table2 B3 on B3.ID3=A.ID
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top