2012-01-10 7 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 

のは、これら2つのテーブルですと仮定しましょう。..

私は返すクエリを必要とします次の表:

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

。しかし、それがsqlliteに存在するかどうかはわかりません。 – Baatar

答えて

0

基本的にはFULL OUTER JOINを実行しますが、これはSQLLITEでは直接サポートされていませんが、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私は2番目のクエリでどこを残しましたか。私はクエリを更新し、今すぐ動作するはずです。 –

1

あなたはleft joinunionright joinを使用することができます(それはnot implemented yet in SQLiteある)ので、代わりに入れ替えたテーブルとright join使用left join:あなたはFULL OUTER 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 
関連する問題