2012-03-29 18 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