2012-04-02 213 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

移動標準的外連接表從WHERE子句ON子句:

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

大非常感謝你只檢索行 - 這工作 – veote 2012-04-02 13:13:50

0
where f.fk_osname = "AIX" 

我想只有一個記錄本OSNAME?

0

因爲where f.fk_osname = "AIX"

如果數據犯規在你的右邊表中存在,它是NULL,和你問哪裏fk_osname是=「AIX」`

你可以做WHERE (f.fk_osname = "AIX" OR f.fk_osname IS NULL)

+0

這也不起作用,但艾克沃克的答案工作正常 – veote 2012-04-02 13:18:35