2012-01-10 2 views
-1

저는 SQLITE를 사용하고 있으며 어떤 쿼리도 찾을 수없는 상황에 처했습니다.이 케이스에 대한 쿼리를 작성하십시오

이 사례에 대한 질의를 작성하십시오.

표 - A :

Name Class RollNo 

ab  2  1 
bc  2  2 
cd  2  3 

표 - B :

Sport Grade RollNo 

wx  A  2 
xy  B  3 
yz  C  4 
zz  D  5 

이의이 두 가지가 테이블입니다 가정 해 봅시다 ..

이 난을 반환하는 쿼리가 필요합니다 다음 표 :

Name Class RollNo Sport Grade 

ab  2  1  
bc  2  2  wx  A 
cd  2  3  xy  B 
      4  yz  C 
      5  zz  D 

마지막 테이블에서 내가 무엇을 의미하는지 이해 하셨기를 바랍니다. 모든 롤 번호가 결과 테이블에 있어야합니다 ...

그리고 한 번 더 SQLITE을 사용하고 있습니다.

+0

당신은 가입 FULL OUTER를 사용해야합니다. 하지만 그것이 sqllite에 존재하는지 잘 모르겠습니다. – Baatar

답변

0

기본적으로 SQLLITE에서 직접 지원되지 않는 FULL OUTER JOIN을 수행하려고하지만 UNION의 LEFT JOINS를 사용하여 동일한 효과를 얻을 수 있습니다.

SELECT a.Name, a.class, a.rollNo, b.support, b.grade 
FROM TABLE-A a 
     LEFT JOIN TABLE-B b 
      ON a.RollNo = b.RollNo 
UNION ALL 
SELECT a.Name, a.class, b.rollNo, b.support, b.grade 
FROM TABLE-B b 
     LEFT JOIN TABLE-A a 
      ON a.RollNo = b.RollNo 
WHERE a.RollNo IS NULL 
+0

이 접근법에서 RollNo는 중복됩니다. –

+1

'union all' 대신'union '을 시도해 보셨습니까? 나는 그것이 지원되는지 모른다. –

+0

@PrateekRaj 두 번째 쿼리에서 where를 생략했습니다. 쿼리를 업데이트했는데 이제는 작동합니다. –

1

당신은 left joinright joinunion을 사용할 수 있습니다 (하지만 not implemented yet in SQLite입니다) 그래서 상호 교환 된 테이블 대신 right join 사용 left join :

select * from (
    select a.name, a.class, coalesce(a.rollNo, b.rollNo) as rollNo, b.sport, b.grade 
    from tableA a 
    left join tableB b on a.rollNo = b.rollNo 
    union 
    select a.name, a.class, coalesce(a.rollNo, b.rollNo) as rollNo, b.sport, b.grade 
    from tableB b 
    left join tableA a on b.rollNo = a.rollNo 
) t 
order by rollNo 
관련 문제