2012-04-02 16 views
2

2つのテーブルを結合する必要があります。 左テーブルのすべての属性は、他のテーブルと結合できるかどうかに関係なく、結果テーブルに表示する必要があります。MySQLの左結合が正常に動作しません

私はfollwingを行うと、私はこれを行うと予想される結果

week_table: 
date  kw note 
---------- -- ---- 
2012-04-01 0 NULL 
2012-04-02 0 NULL 

fact_table: 
id number_of_application number_of_cluster number_of_jvm number_of_node number_of_was fk_wasversion fk_date fk_domain fk_osname fk_osarch fk_osversion fk_stage 
-- --------------------- ----------------- ------------- -------------- ------------- ------------- ---------- --------- --------- --------- ------------ -------- 
    1     114     8   80    18   18 6.0   2012-04-01 domain1 Linux  sparc  2   stage1 
    2     114     8   80    18   18 6.0   2012-04-02 domain1 Linux  sparc  2   stage1 
    3     114     8   80    18   18 6.0   2012-04-01 domain1 AIX  sparc  2   stage1 
    4     114     8   80    18   18 6.0   2012-04-02 domain1 Solaris sparc  2   stage1 

を得るいけない:

select 
    w.date, 
    coalesce(sum(f.number_of_was), 0) 
from 
    week_table w 
    left join fact_table f on (w.date = f.fk_date) 
where f.fk_osname = "AIX" 
group by w.date; 

私は取得のみ:

期待
date  coalesce(sum(f.number_of_was), 0) 
---------- --------------------------------- 
2012-04-01        18 

date  coalesce(sum(f.number_of_was), 0) 
---------- -------------------------------- 
2012-04-02       18 

誰かが理由を知っていますか?

よろしく

答えて

11
外の基準は、ON句にWHERE句からテーブルに参加した移動

select 
    w.date, 
    coalesce(sum(f.number_of_was), 0) 
from 
    week_table w 
    left join fact_table f on (w.date = f.fk_date and f.fk_osname = "AIX") 
group by w.date; 
+0

偉大はどうもありがとうございまし行うことができます=「AIX」 '

ある行だけを取得するために求めています - この作品は – veote

0
where f.fk_osname = "AIX" 

私はこのOSNAMEを持つ1つのレコードのみがあると思いますか?

0

ためwhere f.fk_osname = "AIX"

のデータdoesntの場合は、あなたの右のテーブルに存在し、それがNULLで、あなたはfk_osnameあなたがWHERE (f.fk_osname = "AIX" OR f.fk_osname IS NULL)

+0

でも動作しませんが、Ike Walkerの回答はうまくいきます – veote

関連する問題