2013-08-26 3 views
0

У меня есть много-много таблиц, которые отслеживают дружбу.От многих до многих отношений с друзьями

Мне нужно знать, что оба друга одобрили друг друга.

Например, когда человек просит быть другом, их идентификатор попадает в self_uuid и друзей в friend_uuid. Когда друг одобряет запрос, то происходит то же самое, просто наоборот.

enter image description here

как найти всех людей, которые взаимно одобрены друг друга? Как я могу найти всех людей, которые НЕ взаимно одобрили друг друга?

ответ

3

Взаимное утверждение:

select f1.self_uuid, f1.friend_uuid 
from friends f1 
join friends f2 on f1.self_uuid = f2.friend_uuid and f1.friend_uuid = f2.self_uuid 

Друг просит не были утверждены:

select f1.self_uuid, f1.friend_uuid 
from friends f1 
left join friends f2 on f1.self_uuid = f2.friend_uuid and f1.friend_uuid = f2.self_uuid 
where f2.self_uuid is null 
+0

вау спасибо так много! Является ли этот запрос дорогостоящим, производительность мудрая? – stackOverFlew

+0

Производительность должна быть хорошей, если у вас есть комбинированный индекс для обоих столбцов. – Barmar

Смежные вопросы