查询是这样的:
SELECT FriendID FROM Relationships WHERE UserID = 1
INTERSECT
(SELECT FriendID FROM Relationships WHERE UserID = 2
UNION SELECT UserID FROM Relationships WHERE FriendID = 2)
(对于好奇的读者,请注意在这种情况下朋友关系不一定是对称的)
我已经尝试了所有可能的括号组合而没有运气。
如果我省略括号,那么就没有运算符优先级,因为它读取它像5 + 6 * 3 = 33,所以如果我把联合放在交集之前,查询工作正常。但是当我必须与两个工会相交时,我会怎么做?
答案 0 :(得分:0)
在这种情况下你可以使用临时表。
答案 1 :(得分:0)
感谢 Larry Lustig (指向我this),我将查询重写如下
SELECT FriendID FROM Relationships WHERE UserID = 1
INTERSECT SELECT ID FROM
(SELECT FriendID AS ID FROM Relationships WHERE UserID = 2
UNION SELECT UserID AS ID FROM Relationships WHERE FriendID = 2)
它有效。