SQL VIEW WITH JOINS

时间:2011-07-22 16:09:05

标签: mysql sql join if-statement case-statement

我有3张桌子

节点表 - Nodeid,节点关系id(NodeRelID)

节点关系表 - id,Nodeid,Node Link id

Eventstatus Tabel - id,Nodeid,Node Status。

我想创建一个视图,显示每个节点的id以及与之相关的节点的状态。我在这做过;

CREATE VIEW `view_alarm` AS 

select `node`.`NodeID` AS `NodeID`,`eventstatus`.`EventID` AS `EventID` 

from ((`node` join `node_relationship`) join `eventstatus`) 

where ((`node`.`NodeRelID` = `node_relationship`.`id`) and (`node_relationship`.`Node_LinkID` = `eventstatus`.`NodeID`));

现在我想检索任何没有关系的节点,并在关系状态的位置自动给它们一个0,我希望它存储在同一个表中,所以我通过一个case语句尝试了这个风景。像这样:

CREATE view `view_alarm` AS select 

`node`.`NodeID` AS `NodeID`,
(case when (`node_relationship`.`Node_LinkID` = `eventstatus`.`NodeID`) then `eventstatus`.`EventID` 
when (`node_relationship`.`Node_LinkID` <> `eventstatus`.`NodeID`) then `eventstatus`.`EventID` '0' end) AS `EventID` 

from ((`node` join `node_relationship`) join `eventstatus`) 

where (`node`.`NodeRelID` = `node_relationship`.`id`);

有人能指出我正确的方向。

1 个答案:

答案 0 :(得分:0)

在递归连接中使用外连接

FROM Node n
     LEFT JOIN  Node_Relationship nr1
           ON n.key = nr.key
     LEFT JOIN  Node_Relationship nr2
           ON n.key = nr2.Key
             AND n.key IS NULL

在您的情况下使用它:

   CASE 
      WHEN nr2.[key] IS NOT NULL THEN 0