2012-02-08 5 views
3

하나의 쿼리에서 두 개의 관련 테이블에서 데이터를 가져 오려고합니다. 표는 다음과 같다 :두 개의 관련 테이블에서 데이터를 가져 오는 방법은 무엇입니까?

표 1 :

-------------------------- 
| ID  | username | 
-------------------------- 
| 1   | user1  | 
| 2   | user2  | 
| 3   | user3  | 
| 4   | user4  | 
-------------------------- 

표 2 :

내가 표 2에서 표 1 및 키 - 값 쌍의 모든 행을 포함하여 결과를 얻고 싶은
---------------------------------------------------- 
| ID  | user_id | key  | value  | 
---------------------------------------------------- 
| 1   | 1   | key1  | value1  | 
| 2   | 1   | key2  | value2  | 
| 3   | 2   | key2  | value3  | 
| 4   | 3   | key3  | value4  | 
| 5   | 4   | key1  | value5  | 
| 6   | 4   | key3  | value5  | 
---------------------------------------------------- 

여기서 key = key1. 키가 표 1의 주어진 행에 대해 표 1에 없으면 NULL로 채우십시오. 예상 결과의 예 : 또는

---------------------------------------------------- 
| user_id | username | key  | value  | 
---------------------------------------------------- 
| 1   | user1  | key1  | value1  | 
| 2   | user2  | NULL  | NULL  | 
| 3   | user3  | NULL  | NULL  | 
| 4   | user4  | key1  | value5  | 
---------------------------------------------------- 

- 나는 2 개 테이블에서 SELECT에서 표준 SELECT을 시도 표 키 = 키 1 2.

를 키 - 값 쌍을 포함하지 않는 표 1에서 모든 행 표 1에서 표 2의 JOIN으로 표시되었지만 표 2의 key = key1과 키 - 값 쌍이 포함 된 표 1의 모든 행이 표시됩니다. 이는 정확히 원하는 것과 반대입니다.

제안 사항? 하지 않아도 모든 것을 얻을 당신의 "얼터너티브"

답변

8
select 
     t1.id, 
     t1.username, 
     t2.key, 
     t2.value 
    from 
     table1 t1 
     left join table2 t2 
      on t1.id = t2.user_id 
      and t2.key = 'key1' 

, 단지

where t2.user_id IS NULL 
1

이 시도 .. where 절을 추가

SELECT t1.username,t2.user_id,t2.key,t2.value FROM table1 as t1 left join table2 as t2 on(t1.id = t2.user_id) and t2.key = 'key' 
-1

쿼리는 다음과 같이 보일 수 있습니다 :

SELECT t1.username, t2.key, t2.value FROM table1 AS t1 
LEFT OUTER JOIN table2 AS t2 ON t1.id = t2.user_id; 

예를 들어, n 전용 (didn를 자들을 역을 얻는 방법을 대안으로 그는 단지 특정 키 = '키 1을'허용 샘플을 찾고 있었다

+----------+------+--------+ 
| username | key | value | 
+----------+------+--------+ 
| user1 | key1 | value1 | 
| user1 | key2 | value2 | 
| user2 | key2 | value3 | 
| user3 | NULL | NULL | 
| user4 | key1 | value5 | 
| user4 | key3 | value5 | 
+----------+------+--------+ 
+0

, AND : O 표 2에서 3 USER_ID, 다음 쿼리 (위) 생성합니다 '티). 내 대답을 보니 ... – DRapp

+0

오, 알았어. 감사. –

관련 문제