2017-04-17 8 views
-1

다른 테이블 내의 각 사용자에 대한 값을 결과에서 하나의 출력 행으로 가져 오려고하는 쿼리가 있습니다.각 사용자에 대해 단일 행으로 MySQL 쿼리 연결하기

SELECT DISTINCT table1.ID, table1.username, table1.display_name, 
       CASE WHEN table2.meta_key = 'vgm' THEN table2.meta_value END VGM, 
       CASE WHEN table2.meta_key = 'year_completed' THEN table2.meta_value END 'Year Completed', 
       CASE WHEN table2.meta_key = 'status' THEN table2.meta_value END Status, 
       CASE WHEN table2.meta_key = 'military_grade' THEN table2.meta_value END 'Military Grade' 
      FROM table1, table2 
      WHERE table1.ID = table2.user_id 

최종 결과는 다음과 같습니다. 가능하다면 모든 사용자 정보를 단일 행에 넣고 싶습니다. 누구든지 어떤 제안이 있습니까? 감사. 같은

<table> 
 
<tr> 
 
<td>3</td> 
 
<td>user1</td> 
 
<td>Username Last</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
</tr> 
 
<tr> 
 
<td>3</td> 
 
<td>user1</td> 
 
<td>Username Last</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
<td>Baja</td> 
 
<td>NULL</td> 
 
</tr> 
 
<tr> 
 
<td>3</td> 
 
<td>user1</td> 
 
<td>Username Last</td> 
 
<td>NULL</td> 
 
<td>112</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
</tr> 
 
<tr> 
 
<td>3</td> 
 
<td>user1</td> 
 
<td>Username Last</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
<td>Subt</td> 
 
</tr> 
 
<tr> 
 
<td>3</td> 
 
<td>user1</td> 
 
<td>Username Last</td> 
 
<td>No</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
<td>NULL</td> 
 
</tr> 
 
</table>

표 1은 다음 표 2는

<table> 
 
<tr> 
 
<td>ID</td> 
 
<td>NAME</td> 
 
<td>EMAIL</td> 
 
</tr> 
 
<tr> 
 
<td>3</td> 
 
<td>user1</td> 
 
<td>Username Last</td> 
 
</tr> 
 
<tr> 
 
<td>4</td> 
 
<td>user2</td> 
 
<td>Username2 Last2</td> 
 
</tr> 
 
</table>

등 :

0,123,763

<table> 
 
<tr> 
 
<td>ID</td> 
 
<td>USER_ID</td> 
 
<td>META_KEY</td> 
 
<td>META_VALUE</td> 
 
</tr> 
 
<tr> 
 
<td>1</td> 
 
<td>3</td> 
 
<td>Key 1</td> 
 
<td>Value 1</td> 
 
</tr> 
 
<tr> 
 
<td>1</td> 
 
<td>3</td> 
 
<td>Key 2</td> 
 
<td>Value 2</td> 
 
</tr> 
 
<tr> 
 
<td>1</td> 
 
<td>4</td> 
 
<td>Key 1</td> 
 
<td>Value 1</td> 
 
</tr> 
 
<tr> 
 
<td>1</td> 
 
<td>4</td> 
 
<td>Key 2</td> 
 
<td>Value 2</td> 
 
</tr> 
 
</table>
739,

+1

내가 여기서 뭔가를 놓치고 있습니까? 당신의 결과가 이미 한 줄에 있지 않습니까? –

+0

코드 스 니핏을 실행하면 출력에는 한 사용자에 대해 4 개의 다른 행이 있습니다. NULL 값이없는 행 하나 여야합니다. 다른 테이블에는 각각 자신의 행에 여러 값이 있으며 한 테이블 행에 모든 사용자 정보를 압축하려고합니다. –

+0

나는 table1과 table2에 대한 테이블 스키마와 몇 가지 샘플 데이터를 게시 할 수 있습니까? 나는 이것을 두 테이블이있는 from 대신에 join을 사용하여 해결할 수 있다고 생각한다. 새 쿼리를 제공하기 전에 먼저 요청 된 정보를 확인해야합니다. –

답변

0

아래 쿼리의 주요 차이점 및 당신은 내가 table2을 각 meta_key에 대한 하위 쿼리를 만든 다음 LEFT JOIN를 사용하여 table1에 그 하위 쿼리를 조인. 그러면 각 사용자에 대해 단일 레코드가 생성됩니다.

테이블 스키마 및 쿼리는, table1user_namedisplay_name을 가지고 같은 일부 불일치를 가지고 있지만, 스키마는 NAMEEMAIL 있습니다. 나는 쿼리 이름 필드 이름을 사용했다.

SQL 쿼리

SELECT 
    users.ID AS Id, 
    users.username AS UserName, 
    users.display_name AS DisplayName, 
    vgm.meta_value AS VGM, 
    year_completed.meta_value AS YearCompleted, 
    status.meta_value AS Status, 
    military_grade.meta_value AS MilitaryGrade 

-- Users -- 
FROM table1 AS users 

-- VGM -- 
LEFT JOIN (
    SELECT user_id, meta_key, meta_value 
    FROM table2 
    WHERE meta_key = 'vgm') 
AS vgm ON users.ID = vgm.user_id 

-- Year Completed -- 
LEFT JOIN (
    SELECT user_id, meta_key, meta_value 
    FROM table2 
    WHERE meta_key = 'year_completed') 
AS year_completed ON users.ID = year_completed.user_id 

-- Status -- 
LEFT JOIN (
    SELECT user_id, meta_key, meta_value 
    FROM table2 
    WHERE meta_key = 'status') 
AS status ON users.ID = status.user_id 

-- Military Grade -- 
LEFT JOIN (
    SELECT user_id, meta_key, meta_value 
    FROM table2 
    WHERE meta_key = 'military_grade') 
AS military_grade ON users.ID = status.user_id