2011-11-15 3 views
0

정규화되지 않은 테이블 (선택 사항 아님)에서 다른 테이블로 필드를 매핑하려고합니다. 이 여행을 한 번에 할 수있는 방법이 있습니까? Microsoft SQL을 사용하고 있습니다.테이블에서 정규화되지 않은 필드 매핑하기

TableA: 
ID 
FieldX1_ID (fixed set of fields that could have been better normalized) 
FieldX2_ID 
FieldX3_ID 

TableB: 
FieldX_ID (matches ID's in TableA's fields) 
FieldX_Value 

나는로 출력 행을 싶습니다 TableA.ID 등 TableA.FieldX1_ID, TableA.FieldX2_ID에 대한 TableB.FieldX_Value에 대한 TableB.FieldX_Value ...

답변

0

두 가지 방법으로 결과를 얻을 수 있습니다. 나는 네가 한 일에 대해 당신의 설명에서 확신하지 못한다.

이 결과는 표준화 된 방식으로 표시되도록하려면 (세 개의 행을 얻을) :

SELECT TableA.FieldX1_ID AS ID, TableB.FieldX_Value 
    FROM TableA JOIN TableB ON TableA.FieldX1_ID = TableB.FieldX_ID 
UNION ALL 
SELECT TableA.FieldX2_ID AS ID, TableB.FieldX_Value 
    FROM TableA JOIN TableB ON TableA.FieldX2_ID = TableB.FieldX_ID 
UNION ALL 
SELECT TableA.FieldX3_ID AS ID, TableB.FieldX_Value 
    FROM TableA JOIN TableB ON TableA.FieldX2_ID = Table3.FieldX_ID 

이 결과를하기 위해 드 표준화 된 방식으로 표시 (당신은 하나의 행 수) :

SELECT TableA.FieldX1_ID AS ID1, TableB.FieldX_Value AS Value1, 
     TableA.FieldX2_ID AS ID2, TB2.FieldX_Value AS Value2, 
     TableA.FieldX3_ID AS ID3, TB3.FieldX_Value AS Value3, 
    FROM TableA JOIN TableB ON TableA.FieldX1_ID = TableB.FieldX_ID 
       JOIN TableB AS TB2 ON TableA.FieldX2_ID = TB2.FieldX_ID 
       JOIN TableB AS TB3 ON TableA.FieldX3_ID = TB3.FieldX_ID 
0

예, 당신이 할 수 있습니다 이것은 테이블 A와 B를 여러 번 결합하는 것입니다 (테이블 A의 각 열에 대해 한 번 가입해야합니다). 예를 들어

:

SELECT 
    A.ID 
, FieldX1_Value = B1.FieldX_Value 
, FieldX2_Value = B2.FieldX_Value 
, FieldX3_Value = B3.FieldX_Value 
FROM A 
LEFT JOIN B B1 
    ON A.FieldX1_ID = B1.FieldX_ID 
LEFT JOIN B B2 
    ON A.FieldX2_ID = B2.FieldX_ID 
LEFT JOIN B B3 
    ON A.FieldX3_ID = B3.FieldX_ID 
관련 문제