2011-07-22 4 views
2

J'ai 3 tablesSQL VUE AVEC REJOINT

table Node - NODEID, id relation Node (NodeRelID)

nœud table de relation - id, NODEID, Noeud Lien id

EventStatus Tabel - id, Nodeid, état du nœud.

Je veux créer une vue où elle affiche l'identifiant de chaque nœud et l'état du nœud qui lui est associé. J'ai fait ça ici;

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`)); 

Maintenant, je voudrais récupérer tous les nœuds qui ne sont pas une relation et leur donnent automatiquement un 0 à la place de l'état de la relation et je voudrais que ce stocké dans la même table pour que j'ai essayé ceci par l'intermédiaire une déclaration de cas dans la vue. Comme si:

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`); 

Quelqu'un peut me diriger dans la bonne direction.

+0

Hm, je ne peux pas voir à travers tout à l'heure, mais ne pas utiliser la idiomatiques 'JOIN' syntaxe: 'SELECT ax, par FROM FROM un JOIN b ON (a.a_id = b.a_id)'. Aussi, avez-vous juste besoin d'une jointure externe peut-être? –

Répondre

0

Utiliser les jointures externes dans une récursif rejoindre

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 

utiliser dans votre cas:

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