MySQL左连接无法正常工作

veo*_*ote 2 mysql sql left-join

我想离开加入2桌.所以左表的所有属性都应该显示在结果表中,无论它是否可以与其他表连接.

当我这样做时,我没有得到预期的结果

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
Run Code Online (Sandbox Code Playgroud)

当我这样做:

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;
Run Code Online (Sandbox Code Playgroud)

我只得到:

 date       coalesce(sum(f.number_of_was), 0)
 ---------- ---------------------------------
 2012-04-01                                18
Run Code Online (Sandbox Code Playgroud)

预期:

date       coalesce(sum(f.number_of_was), 0)
---------- --------------------------------
2012-04-02                         18
Run Code Online (Sandbox Code Playgroud)

有人知道为什么吗?

最好的祝福

Ike*_*ker 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;
Run Code Online (Sandbox Code Playgroud)