我有三张桌子
节点表-Nodeid,节点关系id(noderID)
节点关系表-id,Nodeid,节点链接id
事件状态选项卡-id,Nodeid,节点状态。
我想创建一个视图,在其中显示每个节点的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`);

有人能告诉我正确的方向吗。

最佳答案

在递归联接中使用外部联接

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

09-10 04:29
查看更多