Заявката е тази:
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 за отговор № 1В такъв случай можете да използвате временни таблици.
0 за отговор № 2
Благодарение на Лари Лустиг (което ме посочи това), Пренаписах заявката си по следния начин
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)
И това работи.