我有表friends
:user_id friend_id date
。
它的行意味着:user_id在某个日期将另一个用户添加给朋友
我需要提出请求:获取用户,对于他们的每个请求,他们都会回复。
获取所有用户x
:for all(x,y,date)=> (y,x,date2):date2>日期
我尝试写请求,是否适用于所有情况?
select f.user_id from friend f
group by f.user_id
having
(select count(f2.user_id) from friend f2
where f2.date > f.date and f2.friend_id = f.user_id
group by (f.friend_id)) = count(f.friend_id)
我的sql技能不好。
答案 0 :(得分:1)
我认为这必须是有效的。它将为所有用户提供所有反向链接
SELECT
f.user_id
FROM friend f
LEFT JOIN friend f2 ON
f.friend_id = f2.user_id
AND
f2.friend_id = f.user_id
AND
f2.date > f.date
GROUP BY
f.user_id
HAVING
count(f.user_id) = count(f2.user_id);
请告诉我它是否适合您