如何编写SQL查询同表中Sponser id等于另一用户referral id的用户
解决方案
你可以用自连接或者EXISTS子查询实现该需求,请将下述语句中的users替换为你实际的表名,语句中字段对应你的表结构:SID为Sponserid(推荐人ID),RID为referralid(被推荐人关联的上级推荐ID)。
场景1:查询所有有下级用户的推荐人记录(即该用户的SID等于其他用户的RID)
自连接写法
SELECT DISTINCT u1.* FROM users u1 INNER JOIN users u2 ON u1.SID = u2.RID;
这里加DISTINCT是为了避免一个推荐人有多个下级时,查询结果出现重复的推荐人记录,如果你不需要去重可以去掉该关键字。
EXISTS子查询写法
SELECT * FROM users u1 WHERE EXISTS ( SELECT 1 FROM users u2 WHERE u2.RID = u1.SID );
这个写法在数据量较大的场景下性能通常优于自连接。
场景2:查询所有有上级推荐人的用户记录(即该用户的RID等于其他用户的SID)
SELECT u1.* FROM users u1 INNER JOIN users u2 ON u1.RID = u2.SID;
用你的示例表数据执行该语句的话,会返回ID为2到13的所有记录,因为这些用户的RID都对应了另一个用户的SID,只有ID为1的hsn用户的RID为Root不存在对应SID,所以不会返回。
内容的提问来源于stack exchange,提问作者Akash Pise
相关产品推荐
相关产品推荐

