如果您使用EXISTS
而不是连接重写 2 个查询,您可以首先删除DISTINCT
(我假设这uid
是Users
这里的主键),其次,INTERSECT
和EXCEPT
(也称为MINUS
)操作很清楚:
查询一:
SELECT U.uid
FROM users U
WHERE U.status = '1'
AND EXISTS
( SELECT *
FROM friends F
WHERE U.uid = F.friend_two
AND F.friend_one = '1'
AND F.ROLE = 'fri'
) ;
查询 2:
SELECT U.uid
FROM users U
WHERE U.status = '1'
AND EXISTS
( SELECT *
FROM friends F
WHERE U.uid = F.friend_one
AND F.friend_two = '1'
AND F.ROLE = 'fri'
) ;
查询 3:INTERSECT
SELECT U.uid
FROM users U
WHERE U.status = '1'
AND EXISTS
( SELECT *
FROM friends F
WHERE U.uid = F.friend_two
AND F.friend_one = '1'
AND F.ROLE = 'fri'
)
AND EXISTS
( SELECT *
FROM friends F
WHERE U.uid = F.friend_one
AND F.friend_two = '1'
AND F.ROLE = 'fri'
) ;
查询 4: EXCEPT
( MINUS
)
SELECT U.uid
FROM users U
WHERE U.status = '1'
AND EXISTS
( SELECT *
FROM friends F
WHERE U.uid = F.friend_two
AND F.friend_one = '1'
AND F.ROLE = 'fri'
)
AND NOT EXISTS -- notice the NOT here
( SELECT *
FROM friends F
WHERE U.uid = F.friend_one
AND F.friend_two = '1'
AND F.ROLE = 'fri'
) ;