Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当Where子句不匹配时,如何从SQL Server图形表中进行选择_Sql_Sql Server_Sql Server 2017_Sql Graph_Sql Server 2017 Graph - Fatal编程技术网

当Where子句不匹配时,如何从SQL Server图形表中进行选择

当Where子句不匹配时,如何从SQL Server图形表中进行选择,sql,sql-server,sql-server-2017,sql-graph,sql-server-2017-graph,Sql,Sql Server,Sql Server 2017,Sql Graph,Sql Server 2017 Graph,我正在SQL Server中使用图形表 这是我的桌子: --Node Table CREATE TABLE [dbo].[Users] ( [ID] [int] NOT NULL Primary key, [FName] [nvarchar](100) NULL, [LName] [nvarchar](100) NULL )AS NODE --Edge Table CREATE TABLE [dbo].[FriendsOf] AS EDGE 我如何选择所有User1是U

我正在SQL Server中使用图形表

这是我的桌子:

--Node Table
CREATE TABLE [dbo].[Users]
(
    [ID] [int] NOT NULL Primary key,
    [FName] [nvarchar](100) NULL,
    [LName] [nvarchar](100) NULL
)AS NODE
--Edge Table
CREATE TABLE [dbo].[FriendsOf] AS EDGE
我如何选择所有User1是User2的朋友,而User2是User3的朋友 用户1和用户3之间没有直接的边缘

我可以这样写这个查询:

 select distinct 
     u1.FName + ' ' + u1.LName as FirstFullName, 
     u2.FName + ' ' + u2.LName as SecondFullName,
     u3.FName + ' ' + u3.LName as ThirdFullName
 from
     Users u1, FriendsOf fo1, Users u2, FriendsOf fo2, Users u3
 where 
     match(u1-(fo1)->u2-(fo2)->u3) 
     and not exists(select 1 from friendsof fof 
                    where (fof.$from_id = u1.$node_id and fof.$to_id = u3.$node_id) or (fof.$from_id = u3.$node_id and fof.$to_id = u1.$node_id)
 )
select distinct u1.FName + ' ' + u1.LName as FirstFullName, u2.FName + ' ' + u2.LName as SecondFullName,u3.FName + ' ' + u3.LName as ThirdFullName
from Users u1 , FriendsOf fo1 , Users u2 , FriendsOf fo2 , Users u3 , FriendsOf fo3,, FriendsOf fo4
where match(u1-(fo1)->u2-(fo2)->u3) and (not match(u1-(fo3)->u3) or not match(u3(fo4)->u1))
但我想用另一种方式来理解

我想使用如下代码:

 select distinct 
     u1.FName + ' ' + u1.LName as FirstFullName, 
     u2.FName + ' ' + u2.LName as SecondFullName,
     u3.FName + ' ' + u3.LName as ThirdFullName
 from
     Users u1, FriendsOf fo1, Users u2, FriendsOf fo2, Users u3
 where 
     match(u1-(fo1)->u2-(fo2)->u3) 
     and not exists(select 1 from friendsof fof 
                    where (fof.$from_id = u1.$node_id and fof.$to_id = u3.$node_id) or (fof.$from_id = u3.$node_id and fof.$to_id = u1.$node_id)
 )
select distinct u1.FName + ' ' + u1.LName as FirstFullName, u2.FName + ' ' + u2.LName as SecondFullName,u3.FName + ' ' + u3.LName as ThirdFullName
from Users u1 , FriendsOf fo1 , Users u2 , FriendsOf fo2 , Users u3 , FriendsOf fo3,, FriendsOf fo4
where match(u1-(fo1)->u2-(fo2)->u3) and (not match(u1-(fo3)->u3) or not match(u3(fo4)->u1))

请帮助我解决此问题。

匹配中的节点名称可以重复。换句话说,一个节点可以遍历任意数量的 同一查询中的时间。 边名称不能在匹配内重复。 边可以指向任一方向,但必须具有明确的方向。 匹配模式中不支持OR和NOT运算符。MATCH可以与其他表达式组合 在WHERE子句中使用和。但是,将其与使用或不使用的其他表达式相结合并不重要 支持。 查找两个与同一用户都是朋友的用户

SELECT Person1.name AS Friend1, Person2.name AS Friend2
FROM user user1, friend friend1, user user2,
friend friend2, user user0
WHERE MATCH(user1-(friend1)->user0<-(friend2)-user2);

MATCH中的节点名称可以重复。换句话说,一个节点可以遍历任意数量的 同一查询中的时间。 边名称不能在匹配内重复。 边可以指向任一方向,但必须具有明确的方向。 匹配模式中不支持OR和NOT运算符。MATCH可以与其他表达式组合 在WHERE子句中使用和。但是,将其与使用或不使用的其他表达式相结合并不重要 支持。 查找两个与同一用户都是朋友的用户

SELECT Person1.name AS Friend1, Person2.name AS Friend2
FROM user user1, friend friend1, user user2,
friend friend2, user user0
WHERE MATCH(user1-(friend1)->user0<-(friend2)-user2);

@marc-s你编辑我的问题-所以回答我的问题question@marc-s你编辑我的问题-所以回答我的问题谢谢-这是正确的-但也许user1和user2在一起有直接的优势。我希望他们之间没有直接的优势。谢谢-这是正确的-但也许user1和user2在一起有直接的优势。我希望他们之间没有直接的优势。