复杂的sqlite查询,什么是正确的语法?

时间:2011-09-16 23:09:34

标签: sqlite

查询是这样的:

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,所以如果我把联合放在交集之前,查询工作正常。但是当我必须与两个工会相交时,我会怎么做?

2 个答案:

答案 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)

它有效。