2016-06-30 3 views
-1

왼쪽 결합을 사용하여 매우 유용하다는 것을 알았습니다. 오늘 나는 오른쪽에 NULL이 보이지 않는 문제를 보았습니다. 첫 번째 테이블 아래 인 카테고리이다NULL로 Mysql 왼쪽 결합 문제가 발생했습니다.

id name 
1  ROR 
2 Mutation 
3 Partition 

번째 테이블은 아래와 인 scheme_category이다 기간 2천16분의 3 들어

id scheme_id category_id period 
1  12    1   3/2016 
2  12    2   3/2016 
3  12    1   4/2016 
4  12    2   4/2016 
5  12    3   4/2016 
6  12    1   5/2016 
7  12    3   5/2016 

, 값 마찬가지로 CATEGORY_ID 3. 존재하지 , 기간 5/2016 동안 category_id 2 값이 존재하지 않습니다. scheme_category 테이블의 존재하지 않는 범주가 NULL로 표시되도록 category 및 scheme_category 테이블을 사용하여 쿼리를 작성했습니다.

select category.name, period 
from category 
    left join scheme_category on category.id= scheme_category.category_id 

그러나이 쿼리는 NULL로 필드를 표시하지 않습니다. 이 점에 대해 안내하십시오.

+1

당신의 scheme_category 테이블에 모든 고유 한 범주 값이 포함되어 있으므로 카테고리에 새 값을 삽입하려고 시도하면 null이됩니다. –

+1

이 쿼리는 샘플 데이터에 대해 'NULL'로 표시된 필드를 분명히 표시하지 않았습니다. – Blank

+0

이 솔루션이 쿼리를 시도하십시오 : '을 선택 category.name, 기간, 카테고리 에서 을 CATEGORY_ID는 category.id = scheme_category.category_id'나는 아주 가끔 위해 그것을 시도 후 여기에 질문을 넣어 가지고 –

답변

1

문제는 범주 ID에만 가입하고 범주 ID는 일치한다는 것입니다. 카테고리 ID - 마침표 쌍의 전체 목록이 있어야하며이 목록의 scheme_category 테이블에 가입해야합니다.

마침표를 나열하는 별도의 마침표를 만들거나 scheme_category 테이블 자체에서 마침표를 가져옵니다. 그런 다음 마침표와 범주 ID 목록간에 직교 결합을 만들고이 데이터 집합을 scheme_category 테이블에 조인합니다. 두 번째 옵션은 더 복잡하기 때문에

, 나는 그것을 위해 샘플 코드를 제공합니다 : 내가 phpMyAdmin을에서 당신과 비슷한 두 개의 테이블을 생성

select 
from 
    (select distinct period from scheme_category) t1 
join 
    category --note that there is no join condition -> creating a Cartesian join 
left join 
    scheme_category on t1.period=scheme_category.period and category.id=scheme_category.category_id  
+0

도와 줘서 고마워. 나는 당신의 대답을 받아 들일 것입니다. – John

-1

.

SELECT category.name, scheme_category.peroid 
FROM `scheme_category` 
LEFT JOIN category 
ON category.id = scheme_category.category_id 

을 ... 그리고 그것은 나에게 제공합니다 : 내 쿼리는 다음과 같습니다

name | peroid 
ROR | 3/2016 
Mutation | 3/2016 
ROR |4/2016 

그래서 잘 작동합니다.

+0

질문은 OP가 쿼리가 작동하는지 여부가 아니라 예상 한 'null'을 보지 못하는 이유였습니다. –

관련 문제