Сложный sqlite-запрос, какой правильный синтаксис? - PullRequest
0 голосов
/ 17 сентября 2011

Запрос такой:

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 голосов
/ 17 сентября 2011

Благодаря Ларри Лустигу (который указал мне это ), я переписал свой запрос следующим образом

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 голосов
/ 17 сентября 2011

В этом случае вы можете использовать временные таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...