2012-03-29 20 views
0

有數據庫中的兩個表說Table 1和Table ..表1中的列IP_ADDRESS和應用程序名稱,而表2中的列,IP_ADDRESS avg_cpu,ram_utilization,日期迷茫中使用檢索空值加入

我想檢索所有應用程序'my_system'的日期2012-03-01的ip_address,avg_cpu(平均CPU利用率)...如果某個特定的ip_address沒有avg_cpu值... null,應該返回該ip_address ..什麼修改我應該怎樣做下面的查詢以獲得預期的結果...我很困惑,因爲這是我第一次加入新手

SELECT 
    `table1`.`ip_address`, 
    `table1`.`application`, 
    `table2`.`avg_cpu` 
from 
    `table1` 
    right outer join `table2` ON `table1`.`ip_address`=`table2`.`ip_address` 
where 
    `table2`.`date`='2012-03-01' 
    and `table1`.`application`='My_System' 

回答

1

我確定如果我理解你的問題,但聽起來你可能想嘗試「left outer join」,它將包含連接謂詞不匹配的行......在這種情況下,右邊的值加入的一面將爲NULL

+0

上嘗試左外連接未在表2 avg_cpu utilzation值IP_ADDRESS的一個不顯示...這IP_ADDRESS存在於表1,而不是在表2 – Pramod 2012-03-29 18:03:40

+0

作爲HLGEM下面提及的問題是你的where子句。左連接將包含一行表格2中缺少的IP地址,但是它會被where子句過濾掉,因爲日期爲空,因此不等於'2012-03-01'。嘗試使用子句「(table2'.'date' ='2012-03-01'或'table2'.'date' IS NULL)and ...」來看看我的意思。 – RyanHennig 2012-04-04 20:27:46

1

您確定需要外連接嗎?如果是這樣,那麼你的查詢應該是這樣的:

SELECT 
    `table1`.`ip_address`, 
    `table1`.`application`, 
    `table2`.`avg_cpu` 
from 
    `table1` 
    left join `table2` ON `table1`.`ip_address`=`table2`.`ip_address` and `table2`.`date`='2012-03-01' 
where 
    `table1`.`application`='My_System' 

注意,我改變分辯加入左加入,移動表2條件ON部分(這是必需的左/右連接,否則他們的工作作爲內部連接)

0

如果我understandyour需要正確的,我認爲這會工作:

SELECT 
    `table1`.`ip_address`, 
    `table1`.`application`, 
    `table2`.`avg_cpu` 
FROM  `table1`  
LEFT OUTER JOIN `table2` 
    ON `table1`.`ip_address`=`table2`.`ip_address` 
     AND `table2`.`date`='2012-03-01'  
WHERE `table1`.`application`='My_System' 

喜歡@RyanHenning,我想你指的是左連接不右連接,所以我相應調整的代碼。請注意,即使您在原始文件中有右外連接,但實際上沒有外連接,因爲您必須通過連接左側的表滿足where語句中的特定條件。我也認爲你可能會發現這個鏈接有助於理解爲什麼where子句不正確。 http://wiki.lessthandot.com/index.php/WHERE_conditions_on_a_LEFT_JOIN