1

私はこのようなテーブルを持っています

ID       Type
---     -------
1        17    
2        18    
3        18   
10       16

そしてこのような2番目のテーブル

ID       Month
---     -------
1        Feb    
2        Feb    
3        Feb
4        Feb    

2番目のテーブルのすべてを選択し、最初のテーブルのタイプと一致させたいと思います。最初のテーブルに一致するIDがない場合でも、表示したいと思います。

今、私はこのクエリを実行しています

 select t2.id, t2.month, t1.type
 from t2, t1
 where t1.id = t2.id 

そしてそれは私にこの結果を与えています

ID   MONTH  TYPE
1    Feb     17
2    Feb     18
3    Feb     18

しかし、私が欲しいのはこの結果です

ID   MONTH  TYPE
1    Feb     17
2    Feb     18
3    Feb     18
4    Feb     0

上記の結果が得られるSQLステートメントを作成するにはどうすればよいですか?

SQLフィドル:http ://sqlfiddle.com/#!2 / c90f5 / 1

4

4 に答える 4

1

あなたはただ使用する必要がありますLEFT JOIN-私はまたCOALESCEタイプのために0を返すために使用しました-あなたはまた使用することができますIFNULL

SELECTt2.id, t2.month,  COALESCE(t1.type,0) type
FROM t2 LEFT JOIN t1
    ON t1.id = t2.id 

更新されたフィドル

于 2013-02-21T14:28:36.360 に答える
0

外部結合を使用する必要があります。これにより、一方のテーブルのすべての行と、結合するもう一方のテーブルの値が得られます。このような:

select t2.id, t2.month, t1.type
from t2 left outer join t1
on t1.id = t2.id

ただし、タイプの値は2月4日には欠落しているため、nullになります。

これが必要な場合は、フィールドリストでnullを0にマップする必要がありますが、それは単に間違っているため、お勧めしません。

于 2013-02-21T14:32:59.170 に答える
0
SELECT t2.id, t2.month, t2.type
FROM t2 LEFT OUTER JOIN t1
    ON t1.id = t2.id 
UNION(
SELECT t2.id, t2.month, '0' AS type
FROM t2
EXCEPT
SELECT t2.id, t2.month, '0' AS type
FROM t2 LEFT OUTER JOIN t1
    ON t1.id = t2.id )
于 2013-02-21T14:33:28.073 に答える
0

あなたは作ることができてLEFT JOIN、使うことができますIFNULL

SELECT table2.id, table2.month, IFNULL(table1.type, 0) as type FROM t2 as table2 LEFT JOIN t1 table1 ON table2.id = table1.id
于 2013-02-21T14:34:07.693 に答える