2011-09-16 66 views
0

查詢是這個:複雜的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那樣讀取它就沒有操作符優先級,所以如果我把交點放在交點之前,查詢就可以正常工作。但是當我需要交叉兩個工會時,我會做什麼?

+1

我相信答案在這裏:http://old.nabble.com/Nested-SELECTS-using-UNION-and-INTERSECT-syntax-problems....-td22441795.html。 –

+0

謝謝拉里,我從你的鏈接開始找到了一個解決方案 – gd1

回答

0

由於拉里·勒斯蒂格(其中我指出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) 

和它的作品。

0

在這種情況下,您可以使用臨時表。

+0

感謝你的建議,但我認爲在這種情況下,只會使查詢的可讀性降低,即使在可能的情況下也是如此(臨時表)。看看我自己的解決方案的答案。 – gd1