2011-12-12 4 views
0

안녕하세요, Stack Overflow의 동료 여행객. 나는 내가 얻고있는 것을 더 잘 설명 할 수있는 그림 이외의 다른 방법을 묻는 방법을 완전히 확신하지 못합니다. 어떤 경우에는 다른 곳에서이 질문을 받았고 발견하지 못해 사과드립니다.MYSQL 비정규 화 된 테이블 조회

2 개의 테이블 tableA와 tableB가 있습니다. TableA에는 몇 개의 항목이있는 id 및 displayName으로 표시된 열이 들어 있습니다 (간단히하기 위해 5로 가정합니다). ID 열은 고유하고 자동 증가되며 검색을위한 기본 키입니다. 두 번째 테이블 (TableB)에는 해당 항목에 대한 ID뿐만 아니라 TableA의 ID에 대한 4 개의 참조와 관련성이없는 몇 가지 관련없는 정보가 들어 있습니다. 그래서 다음과 같이 나타납니다

TableA 
------------------------- 
| id | displayName | 
------------------------- 
| 1  | itemA  | 
| 2  | itemB  | 
| 3  | itemC  | 
| 4  | itemD  | 
| 5  | itemE  | 
------------------------- 

TableB 
-------------------------------------------------------- 
| id | name | varA | varB | varC | varD | 
-------------------------------------------------------- 
| 1  | elm1 | 3 | 4 | 2 | 5 | 
| 2  | elm2 | 4 | 5 | 2 | 1 | 
| 3  | elm3 | 1 | 4 | 3 | 2 | 
| 4  | elm4 | 2 | 1 | 5 | 4 | 
| 5  | elm5 | 3 | 4 | 5 | 1 | 
-------------------------------------------------------- 

I 현재 값을 축소하고 내가 필요한 나에게 정보를 제공하는 쿼리가 있습니다 SQL은 : tB.name, tB.varA, tB.varB, tB.varC을 선택합니다 , tB.varD FROM tableB tB GROUP BY tB.name

이제 varA, varB 등을 숫자로 표시하는 대신 TableA와 연결된 데이터와 displayName을 삽입해야합니다. . 그래서 그 대신

Result 
----------------------------------------------- 
| name | varA | varB | varC | varD | 
----------------------------------------------- 
| elm1 | 3 | 4 | 2 | 5 | 
| elm2 | 4 | 5 | 2 | 1 | 
----------------------------------------------- 

의 그것은 보여줄 것이다 :

Result 
----------------------------------------------- 
| name | varA | varB | varC | varD | 
----------------------------------------------- 
| elm1 | itemC | itemD | itemB | itemE | 
| elm2 | itemD | itemE | itemB | itemA | 
----------------------------------------------- 

답변

2

당신은 4 그룹화 한 후 가입해야 만합니다.

P. 나는 이해하지 못한다. 왜 rusults를 tableB에 그룹화 하는가?

SELECT b.name, 
    aa.displayName as varA, 
    ab.displayName as varB, 
    ac.displayName as varC, 
    ad.displayName as varD 
FROM tableB as b 
JOIN tableA as aa ON b.varA = aa.id 
JOIN tableA as ab ON b.varB = ab.id 
JOIN tableA as ac ON b.varC = ac.id 
JOIN tableA as ad ON b.varD = ad.id; 
:

당신이 (다른 경우에는 다른 값이 훨씬 이해가되지 않는) 그런 식으로 groupung 필요가 없습니다 가정