2014-12-07 53 views
0

的所有組合我有三列IDTIME_STAMP虛擬機名稱cpu_usage表。自加入一個表來獲取值2列

表中沒有每個時間戳的所有vm_names的值。

但我想要一個結果,其中包含每個vm_name的值爲每個time_stamp。

我的表有4個獨特的虛擬機和20個獨特的時間戳。 ,表中包含50行。

我想返回4 X 20 = 80行,如果vm_name和time_stamp的組合不存在,它會爲cpu使用分配一個0值。

下面的嘗試返回162行,我沒有看到cpuusage值不存在任何空值。

select t1.timestamp,t2.timestamp,t1.vm_name,t2.vm_name,t1.cpuUsage, t2.cpuUsage from  `VM_monitoring_5min t1` 
right join VM_monitoring_5min t2 
on t1.timestamp = t2.timestamp 

這裏是SQL小提琴http://sqlfiddle.com/#!2/998e0/1

+1

可以提供樣品表中小提琴?這可以幫助他人輕鬆地知道。 – 2014-12-07 07:02:27

+0

爲你的'select'子句添加'distinct'。 – Ashalynd 2014-12-07 08:55:58

回答

0
select distinct n.vm_name 
      , c.timestamp 
      , coalesce(t1.cpuUsage,0) 
     from VM_monitoring_5min n 
     join VM_monitoring_5min c 
     left 
     join VM_monitoring_5min t1 
     On t1.vm_name = n.vm_name 
     and t1.timestamp = c.timestamp 

http://sqlfiddle.com/#!2/998e0/3

0

交叉連接所有不同的虛擬機名稱和時間戳,然後離開你的加入表。

select n.vm_name,c.timestamp,coalesce(t1.cpuUsage,0) 
from 
    (select distinct vm_name from VM_monitoring_5min) as n 
    cross join 
    (select distinct timestamp from VM_monitoring_5min) as c 
    left join 
    VM_monitoring_5min t1 
    on n.vm_name = t1.vm_name and c.timestamp = t1.timestamp 
; 

測試Sql Fiddle Demo

+0

這可以簡化,對吧? – Strawberry 2014-12-07 09:19:57